Java Junit4-测试超时时清除

Java Junit4-测试超时时清除,java,timeout,junit4,Java,Timeout,Junit4,当我运行带有注释@test(timeout=3000)的测试并超时时,它会立即终止测试,并且不会调用带有@After注释的tearDown方法 在这种情况下,如何清理 编辑: 我的测试是使用JAX RS在线路上调用资源端点,并在HTTP请求的中间调用测试时间。在这种情况下,我相当肯定@After没有被调用严格地说,它不会终止测试,它会失败。这显然意味着在之后用@注释的方法将运行 下面的代码对我来说非常有用 @Test(timeout=1) public void testTimeout() {

当我运行带有注释@test(timeout=3000)的测试并超时时,它会立即终止测试,并且不会调用带有@After注释的tearDown方法

在这种情况下,如何清理

编辑:
我的测试是使用JAX RS在线路上调用资源端点,并在HTTP请求的中间调用测试时间。在这种情况下,我相当肯定@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

我对timeout属性也有一些问题。也许这能帮你找到四个问题

在我的例子中,混淆是由以下事实引起的:一个带有@test(timeout=…)注释的方法中的测试代码在一个单独的线程中运行。因此,我在测试期间访问的一些ThreadLocal内容无法在@After方法中清理

@Rule  
public Timeout to = new Timeout(300000);

这是从JUnit 4.7开始的。

是的,我正在使用@After and on timeout,它似乎没有被调用。糟糕的是,我应该提供更多信息。我的测试使用JAX RS调用了一组资源端点,所以我真的不确定在HTTP请求中间测试超时会发生什么,我认为它只会杀死测试产生的所有线程。你在说类似的话吗?