文
章
目
录
章
目
录
学习编写JUnit测试用例,并具有超时行为。如果测试未在给定的时间限制内完成执行,则将强制停止其执行,并将测试标记为失败。
1.为什么测试需要设置超时?
我们可能需要测试应用程序在外部系统在给定时间内没有响应时的故障安全行为。
因此,当我们模拟外部依赖项时,最好使用与超时相关的测试。
这也被认为是JUnit的最佳实践。
如何调用超时?
我们知道每个测试都在一个新线程中运行。如果在测试完成之前指定的超时时间已过,则通过Thread.interrupt()中断其执行。
2. JUnit测试超时示例
要为某个测试用例指定超时时间,请在@Test注释上提及“timeout”属性。
请注意,超时时间以毫秒为单位。
@Test(timeout = 500)
public void testTimeoutOne() throws InterruptedException
{
TimeUnit.SECONDS.sleep(1);
}
在上面的测试中,执行将在500ms后超时,并显示以下消息。
java.lang.Exception: test timed out after 500 milliseconds
3.全局超时的规则
除了为所有测试分别指定超时属性外,我们还可以为类中的所有测试定义JUnit规则。
public class TimeoutTests {
@Rule
public Timeout globalTimeout = Timeout.seconds(2);
@Test
public void testTimeoutOne() throws InterruptedException //PASS
{
TimeUnit.SECONDS.sleep(1);
}
@Test
public void testTimeoutTwo() throws InterruptedException //FAIL
{
TimeUnit.SECONDS.sleep(3);
}
}
在上面的示例中,第一个测试将通过,而第二个测试将失败。