【问题标题】:JUnit runs test several timesJUnit 多次运行测试
【发布时间】:2014-11-28 12:18:49
【问题描述】:

我有一个失败的单元测试,想知道为什么。我发现测试执行了 400 次。试图找出导致测试执行这么多次的原因,我将代码简化为以下内容:

package reproduce;

import org.junit.After;
import org.junit.Test;
import static org.junit.experimental.results.PrintableResult.testResult;

public class FailingTest
{
    static int objCount = 0;

    public FailingTest()
    {
        objCount++;
    }

    @Test
    public void test()
    {
        System.out.println(objCount);
    }

    @After
    public void tearDown()
    {
        testResult(FailingTest.class); // comment this to run only once
    }
}

在我的 tearDown() 方法中,我试图找出测试的结果,因为我的清理操作可能需要几分钟,所以我只想在失败的情况下进行清理,而不是在成功。

我在 code of the verifier rule 中发现了 testResult() 的用法,并认为它对我有用,但如果我的测试经常运行 400 次,它就没有用了。

这是实验性 PrintableResult 的错误,我做错了什么还是有另一种/更简单的方法来实现我的预期结果?

【问题讨论】:

  • 不错的最小测试用例。但是,在旁注中,我并不完全清楚我理解这里的用例。您需要进行哪些清理工作,在某些情况下您可以愉快地跳过,但在其他情况下却不能?
  • @OliverCharlesworth:如果测试不成功,我需要将虚拟机重置为快照,这需要 5 分钟。我滥用 JUnit 来实现系统测试。 tearDown() 方法应成为基类的一部分。
  • github.com/pomkine/junit/blob/master/src/main/java/org/junit/…在testResult里面似乎你的测试再次执行所以它是递归调用。
  • 你能实现你自己的监听器吗? junit.org/javadoc/latest/org/junit/runner/notification/…
  • @pomkine:这应该是答案。

标签: java unit-testing junit junit4


【解决方案1】:

请参阅Junit PrintableResult source 在 testResult 内部,您的测试似乎再次执行,因此它是递归调用。一些关于获得测试结果的有用信息可以在here

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 2012-02-06
    • 2013-08-23
    • 2011-11-12
    • 2014-02-19
    • 2018-02-09
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多