这里的学生。在JUnit 5中,为所有测试强制执行全局超时的最佳方法是什么?
我看到JUnit 4有一个@Rule
功能,但是在JUnit 5中已经删除了。我宁愿不必为每次测试都复制粘贴assertTimeoutPreemptively
。
答案 0 :(得分:5)
目前无法对JUnit Jupiter中的测试强制执行全局抢占超时。
要参与讨论,请参阅以下问题:https://github.com/junit-team/junit5/issues/80
答案 1 :(得分:4)
Junit 5.5支持“全局超时”。只需看看documentation of corresponding property knobs。
例如,尝试打开文件src/test/resources/junit-platform.properties
并粘贴到其中:
junit.jupiter.execution.timeout.default=42 ms
答案 2 :(得分:2)
您提到了JUnit 4 Timeout
@Rule
,该JUnit 4允许基于每个测试类指定超时。 JUnit 5.5在@Timeout
批注中具有与实验功能直接等效的功能。可以按照与JUnit 4规则相同的方式将其应用于类级别,在这种情况下,它适用于该类及其@Nested
类中的所有测试。它也可以应用于单个@Test
或生命周期(@BeforeAll
,@BeforeEach
,@AfterEach
或@AfterAll
)方法。
通过
@Timeout
批注,可以声明如果执行时间超过给定的持续时间,则测试,测试工厂,测试模板或生命周期方法应失败。持续时间的时间单位默认为秒,但可以配置。[...]
要将相同的超时应用于测试类及其所有
@Nested
类中的所有测试方法,可以在类级别声明@Timeout
批注。然后,它将被应用于该类及其@Nested
类中的所有测试,测试工厂和测试模板方法,除非被特定方法或@Timeout
类上的@Nested
注释所覆盖。请注意,在类级别声明的@Timeout
批注不适用于生命周期方法。