当我使用注释@Test(timeout = 3000)运行测试并且超时时,它会立即终止测试并且不会调用使用@After注释的tearDown方法。
在这种情况下清理的方法是什么?
编辑: 我的测试是通过线路使用jax-rs调用资源端点,并且测试在http请求中间超时。这是我相当确定@After没有被调用的情况
答案 0 :(得分:2)
严格地说,它没有杀死测试,它失败了。这显然意味着使用@After
注释的方法将会运行。
以下代码对我来说就像魅力一样。
@Test(timeout=1)
public void testTimeout() {
try {
Thread.sleep(10);
} catch (InterruptedException ex) {}
}
@After
public void after() {
System.out.println("@After is invoked, indeed.");
}
输出是,
Testsuite: javaapplication1.MainTest
After is invoked, indeed.
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.054 sec
答案 1 :(得分:1)
我也遇到了一些超时属性问题。也许这可以帮助你找到四个问题......
在我的情况下,混淆是由于使用@Test(timeout = ...)注释的方法中的测试代码在单独的线程中运行。因此,我在测试期间访问的一些ThreadLocal内容无法在@After方法中清除。
答案 2 :(得分:1)
@Rule
public Timeout to = new Timeout(300000);
这适用于JUnit 4.7。