JUnit 5-全局超时?

Tra*_*vis 5 junit junit5

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

我看到JUnit 4具有一项@Rule功能,但是在JUnit 5中已将其删除。我希望不必assertTimeoutPreemptively为每个测试都复制粘贴。

Sam*_*nen 5

当前无法对JUnit Jupiter中的测试强制执行全局的抢先超时。

要参与讨论,请参见以下问题:https : //github.com/junit-team/junit5/issues/80


Lub*_*ubo 5

Junit 5.5 确实支持“全局超时”。只需查看相应属性旋钮的文档即可

例如,尝试打开文件src/test/resources/junit-platform.properties并粘贴到那里:

junit.jupiter.execution.timeout.default=42 ms
Run Code Online (Sandbox Code Playgroud)


M. *_*tin 5

您提到了 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