在JUnit 5中,对所有测试强制执行全局超时的最佳方法是什么?我看到JUnit 4有一个@Rule特性,但是在JUnit 5中已经删除了这个特性。我不希望每次测试都复制粘贴assertTimeoutPreemptively。
@Rule
assertTimeoutPreemptively
mec1mxoz1#
Junit 5.5确实支持“全局超时”,只需查看相应属性旋钮的文档即可。例如,尝试打开文件src/test/resources/junit-platform.properties并粘贴到其中:
src/test/resources/junit-platform.properties
junit.jupiter.execution.timeout.default=42 ms
qoefvg9y2#
在JUnit 5.5版本之前,在JUnit Jupiter中不可能对测试强制执行全局的、抢占式的超时。这个功能是作为一个实验特性添加到JUnit 5.5中的。要查看有关此功能的讨论,请参阅以下问题:https://github.com/junit-team/junit5/issues/80
wfveoks03#
您提到了JUnit 4 @Rule特性,该特性允许使用带注解的Timeout字段在每个测试类的基础上指定超时,JUnit 5.5在@Timeout注解中有一个直接的等效项,可以按照与JUnit 4规则相同的方式将其应用于类级别。在这种情况下,它适用于类及其@Nested类中的所有测试。它还可以适用于单个@Test或生命周期(@BeforeAll、@BeforeEach、@AfterEach或@AfterAll)方法。根据JUnit 5用户指南:@Timeout注解允许声明如果测试、测试工厂、测试模板或生命周期方法的执行时间超过给定的持续时间,则该测试、测试工厂、测试模板或生命周期方法将失败。持续时间的时间单位默认为秒,但可以配置。[...]要将相同的超时应用于一个测试类及其所有@Nested类中的所有测试方法,您可以在类级别声明@Timeout注解。并测试该类及其@Nested类中的模板方法,除非被特定方法上的@Timeout注解或@Nested覆盖请注意,在类级别声明的@Timeout注解不适用于生命周期方法。
Timeout
@Timeout
@Nested
@Test
@BeforeAll
@BeforeEach
@AfterEach
@AfterAll
3条答案
按热度按时间mec1mxoz1#
Junit 5.5确实支持“全局超时”,只需查看相应属性旋钮的文档即可。
例如,尝试打开文件
src/test/resources/junit-platform.properties
并粘贴到其中:qoefvg9y2#
在JUnit 5.5版本之前,在JUnit Jupiter中不可能对测试强制执行全局的、抢占式的超时。这个功能是作为一个实验特性添加到JUnit 5.5中的。
要查看有关此功能的讨论,请参阅以下问题:https://github.com/junit-team/junit5/issues/80
wfveoks03#
您提到了JUnit 4
@Rule
特性,该特性允许使用带注解的Timeout
字段在每个测试类的基础上指定超时,JUnit 5.5在@Timeout
注解中有一个直接的等效项,可以按照与JUnit 4规则相同的方式将其应用于类级别。在这种情况下,它适用于类及其@Nested
类中的所有测试。它还可以适用于单个@Test
或生命周期(@BeforeAll
、@BeforeEach
、@AfterEach
或@AfterAll
)方法。根据JUnit 5用户指南:
@Timeout
注解允许声明如果测试、测试工厂、测试模板或生命周期方法的执行时间超过给定的持续时间,则该测试、测试工厂、测试模板或生命周期方法将失败。持续时间的时间单位默认为秒,但可以配置。[...]
要将相同的超时应用于一个测试类及其所有
@Nested
类中的所有测试方法,您可以在类级别声明@Timeout
注解。并测试该类及其@Nested
类中的模板方法,除非被特定方法上的@Timeout
注解或@Nested
覆盖请注意,在类级别声明的@Timeout
注解不适用于生命周期方法。