为什么JUnit使用不同的结果运行测试两次

时间:2018-06-08 00:37:59

标签: eclipse junit5

从Eclipse运行JUnit时(使用右键单击|运行为 - 项目级别和单个测试级别的相同结果),我的测试运行两次。有一次测试按预期运行(并且仅使用包名称标记),另一次我得到虚假的空指针异常(并标记为完全限定的包名称)。我没有任何套件,并且运行中的不同结果意味着它似乎不是the same issue that others are having with tests running twice

我的测试文件(减去导入)是:

public class CommandHistoryTest extends TestCase {
    private CommandHistory commandHistory;

    @BeforeEach
    public void initEach() {
        commandHistory = new CommandHistory();
    }

    @Test
    @DisplayName("On creation, canUndo and canRedo should be false")
    public void testCreate() {
        Assertions.assertFalse(commandHistory.canUndo());
        Assertions.assertFalse(commandHistory.canRedo());
    }
}

正如我所说的,这在JUnit传递之一上工作正常 - 直到我实现commandHistory的相关位并在我实现它们时传递失败 - 但在另一个传递它给我一个空指针异常在Assertions.assertFalse(commandHistory.canUndo());

我可以忍受这个,因为我得到了一组有效的测试结果,但在第二次通过时看到所有那些红旗让我感到难过。如何停止虚假测试?

编辑:我注意到在包浏览器中,测试显示为'> CommandHistoryTest.java”。我添加了另一个测试类,它没有显示'>'包浏览器中的符号,并且不会运行两次。 '>'是什么意思?

再次编辑:不,我现在看到'>'是git集成的一部分,但答案如下。

1 个答案:

答案 0 :(得分:5)

JUnit运行你的测试两次:一次使用Vintage引擎,因为它从JUnit 3扩展TestCase,一次使用Jupiter引擎,因为它包含一个用org.junit.jupiter.api.Test注释的方法。虽然后者执行@BeforeEach方法,但前者不执行。只需删除extends TestCase,它只会运行一次。