JUnit 5 --全局超时?

wsxa1bj1  于 2023-01-02  发布在  其他
关注(0)|答案(3)|浏览(166)

在JUnit 5中,对所有测试强制执行全局超时的最佳方法是什么?
我看到JUnit 4有一个@Rule特性,但是在JUnit 5中已经删除了这个特性。我不希望每次测试都复制粘贴assertTimeoutPreemptively

mec1mxoz

mec1mxoz1#

Junit 5.5确实支持“全局超时”,只需查看相应属性旋钮的文档即可。
例如,尝试打开文件src/test/resources/junit-platform.properties并粘贴到其中:

junit.jupiter.execution.timeout.default=42 ms
qoefvg9y

qoefvg9y2#

在JUnit 5.5版本之前,在JUnit Jupiter中不可能对测试强制执行全局的、抢占式的超时。这个功能是作为一个实验特性添加到JUnit 5.5中的。
要查看有关此功能的讨论,请参阅以下问题:https://github.com/junit-team/junit5/issues/80

wfveoks0

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注解不适用于生命周期方法。

相关问题