当我使用注解@Test(timeout = 3000)运行测试并超时时,它立即终止测试,并且不会调用用@After注释的tearDown方法。Junit4 - 在测试超时时清除
在这种情况下清理的方法是什么?
编辑: 我的测试是使用jax-rs通过线路调用资源终点,并且测试在http请求中超时。这种情况下,我相当肯定@After没有被调用
当我使用注解@Test(timeout = 3000)运行测试并超时时,它立即终止测试,并且不会调用用@After注释的tearDown方法。Junit4 - 在测试超时时清除
在这种情况下清理的方法是什么?
编辑: 我的测试是使用jax-rs通过线路调用资源终点,并且测试在http请求中超时。这种情况下,我相当肯定@After没有被调用
严格来说,它不杀死测试,它会失败。这显然意味着用@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
我有一些问题与超时属性了。也许这可以帮助你找到四个问题...
在我的情况下,混淆是由于在一个方法中用@Test(timeout = ...)注释的测试代码运行在一个单独的线程中。因此,我在测试过程中访问的一些ThreadLocal内容无法在@After方法中清除。
我的不好,我应该给更多的信息。我的测试通过网络使用jax-rs调用了一堆资源端点,所以我真的不确定当测试在http请求中超时会发生什么,我认为它只是杀死了测试产生的所有线程。你在说什么类似的东西吗? – Prasanna 2011-02-24 16:13:37
@Rule
public Timeout to = new Timeout(300000);
这从JUnit 4.7开始工作。
是的,我正在使用@After和超时似乎没有被调用。 – Prasanna 2011-02-24 08:42:33
@Prasanna:我刚刚更新了我的帖子以包含我的测试。 – 2011-02-24 08:48:18