JUnit 5 - 全局超时?

时间:2017-10-31 17:32:31

标签: junit junit5

这里的学生。在JUnit 5中,为所有测试强制执行全局超时的最佳方法是什么?

我看到JUnit 4有一个@Rule功能,但是在JUnit 5中已经删除了。我宁愿不必为每次测试都复制粘贴assertTimeoutPreemptively

3 个答案:

答案 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)方法。

根据JUnit 5 user guide

通过@Timeout批注,可以声明如果执行时间超过给定的持续时间,则测试,测试工厂,测试模板或生命周期方法应失败。持续时间的时间单位默认为秒,但可以配置。

[...]

要将相同的超时应用于测试类及其所有@Nested类中的所有测试方法,可以在类级别声明@Timeout批注。然后,它将被应用于该类及其@Nested类中的所有测试,测试工厂和测试模板方法,除非被特定方法或@Timeout类上的@Nested注释所覆盖。请注意,在类级别声明的@Timeout批注不适用于生命周期方法。