Junit4 - 测试超时清理

发布于 2024-10-19 12:39:02 字数 194 浏览 2 评论 0原文

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

在这种情况下,清理的方法是什么?

编辑: 我的测试是使用 jax-rs 通过线路调用资源端点,并且测试在 http 请求中间超时。在这种情况下,我相当确定 @After 没有被调用

When I run a test with annotation @Test(timeout = 3000) and it times out, it kills the test immediately and does not call my tearDown method annotated with @After.

What would be the way to clean up in such a scenario?

EDIT:
My test is invoking resource end points using jax-rs over the wire and the test times out in the middle of a http request. This is the case I am fairly certain that @After is not being invoked

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

严格来说,它不会杀死测试,而是会失败。这显然意味着用 @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

Strictly speaking, it doesn't kill the test, it fails it. Which apparently means that the method annotated with @After will run.

The code below is working like charm for me.

@Test(timeout=1)
public void testTimeout() {
    try {
        Thread.sleep(10);
    } catch (InterruptedException ex) {}
}

@After
public void after() {
    System.out.println("@After is invoked, indeed.");
}

Output is,

Testsuite: javaapplication1.MainTest
After is invoked, indeed.
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.054 sec
帝王念 2024-10-26 12:39:02

我也遇到了超时属性的一些问题。也许这可以帮助您找到四个问题...

在我的例子中,混乱是由于用 @Test(timeout=...) 注释的方法中的测试代码在单独的线程中运行这一事实引起的。因此,我在测试期间访问的一些 ThreadLocal 内容无法在 @After 方法中清理。

I had some problems with the timeout attribute, too. Maybe this helps you in finding four problem...

In my case the confusion was caused by the fact that the test code in a method annotated with @Test(timeout=...) is run in a separate thread. Therefore some ThreadLocal stuff I accessed during the test could not be cleaned up in the @After method.

慕巷 2024-10-26 12:39:02
@Rule  
public Timeout to = new Timeout(300000);

这适用于 JUnit 4.7。

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

This works from JUnit 4.7.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文