Java JUnit多次运行测试

Java JUnit多次运行测试,java,unit-testing,junit,junit4,Java,Unit Testing,Junit,Junit4,我的单元测试失败了,我想知道为什么。我发现测试执行了400次。为了找出是什么导致测试执行如此多次,我将代码缩减为以下内容: package reproduce; import org.junit.After; import org.junit.Test; import static org.junit.experimental.results.PrintableResult.testResult; public class FailingTest { static int objCo

我的单元测试失败了,我想知道为什么。我发现测试执行了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()方法中,我试图找出测试的结果,因为我的清理操作可能需要几分钟,所以我只想在失败时清理,而不想在成功时清理

我在中找到了
testResult()
的用法,并认为它对我很有用,但如果我的测试运行400次,它就没有用了


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

查看testResult内部,您的测试似乎再次执行,因此它是递归调用。可以在Nice最小测试用例中找到一些关于获取测试结果的有用信息。然而,另一方面,我不完全清楚我是否理解这里的用例。你需要做什么样的清理,在某些情况下你可以愉快地跳过,而在其他情况下则不能?@OliverCharlesworth:如果测试不成功,我需要将虚拟机重置为快照,这需要5分钟。我误用JUnit来实现系统测试。tearDown()方法将成为基类的一部分。请参阅testResult内部,您的测试似乎再次执行,因此它是递归调用。您能实现自己的侦听器吗?@庞金:这应该是答案。