原创 | TDD工具集:JUnit、AssertJ和Mockito (二十二)编写测试-超时

本文介绍了如何在JUnit中使用@Timeout注解为测试方法设置超时限制,以防止因长时间运行导致的测试失败。超时可以应用于测试方法、工厂方法、模板方法,并可在全局配置文件中统一设置。此外,还探讨了不同配置参数、超时模式以及它们在异步操作测试中的重要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
重要性:★★☆☆☆

如果给一个测试方法、测试工厂方法、生命周期方法、测试模板方法添加了@Timeout注解,那么,当测试没有在指定的时间内完成时,测试将被标识为失败。默认的时间单位是秒,但可以配置为其他时间单位。

下面是代码示例:

.... ....

具体代码示例请戳这里↓↓↓

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十一)编写测试-超时

与assertTimeoutPreemptively()断言相反,@Timeout注解的方法的执行在测试的主线程中进行。 如果超过设定的超时时间,则主线程从另一个线程中断。 这样做是为了确保与Spring等框架的互操作性,这些框架使用了对当前运行的线程敏感的机制——例如ThreadLocal事务管理。

通过在测试类上添加@Timeout注解,可以对测试类中的所有测试方法、测试工厂方法、测试模板方法和嵌套测试类统一设置超时时间,除非这些方法或嵌套类上面也有加@Timeout注解。但是,测试类上的@Timeout注解对生命周期方法没有作用。

在测试工厂方法@TestFactory上添加@Timeout注解,只会对整个测试工厂方法设定超时时间,而不会针对工厂方法产生的每一个测试用例设定超时时间。如果要对后者设定超时时间,请使用assertTimeout()或 assertTimeoutPreemptively()断言。

如果在@TestTemplate、@RepeatedTest、@ParameterizedTest等测试模板方法上添加@Timeout注解,那么就会针对每次调用来应用超时时间。

可以在全局配置文件junit-platform.properties上统一进行超时设置。

在这里插入图片描述

更具体的配置参数会覆盖更不具体的配置参数。例如:junit.jupiter.execution.timeout.test.method.default > junit.jupiter.execution.timeout.testable.method.default > junit.jupiter.execution.timeout.default

上面的配置参数的值遵循下面的(不区分大小写的)格式: [ns|μs|ms|s|m|h|d]。数值和单位之间的空格会被忽略。没有指定单位等价于使用秒为单位。

例如:

在这里插入图片描述

还可以配置junit.jupiter.execution.timeout.mode参数来临时取消超时机制。这个配置参数有三个可能的取值:

enabled:缺省模式。使超时机制生效。
disabled:使超时配置无效。
disabled_on_debug:在调试时使超时设置无效。如果有一个以agentlib:jdwp开头的输入参数,JVM运行时就处于调试模式。
对于可能耗时很久的异步操作,@Timeout特别有用。它可以防止由于异步操作挂起而导致的无限期等待测试完成。

本文相关开源代码戳这里下载↓↓↓

代码下载 | TDD工具集原创开源代码免费下载!

如果觉得有收获,点个【赞】鼓励一下呗!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值