Junit:测试默认构造函数,死代码警告?

1 java junit

我正在尝试使用 Junit 测试类的默认构造函数:

// testing default const
    public void testCaesarCipher() {
        CaesarCipher c1 = new CaesarCipher();
        if (c1 == null) {

            assertTrue(false);

        } else {
            assertTrue(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我收到“死代码”的错误,我该如何解决?

Jon*_*eet 5

摆脱对c1null的检查——这被证明是不可能的。构造函数永远不能返回null

可能想要测试您的构造函数是否不会引发异常 - 在这种情况下只需:

public void testCaesarCipher() {
    new CaesarCipher();
}
Run Code Online (Sandbox Code Playgroud)

……还好。构造函数返回而不抛出异常的事实就是测试将在执行时证明的全部内容。(当然,测试的存在是编译时检查是否存在无参数构造函数。)

我希望您的其他测试无论如何都需要调用构造函数,在这种情况下,您真的认为值得进行此测试吗?

此外,如果你真的没有要检查一些值不为空,你应该使用:

assertNotNull(c1);
Run Code Online (Sandbox Code Playgroud)

这比你的if/清楚得多else。如果您想以编程方式失败,只需调用fail()而不是assertTrue(false);.

  • @RNI2013:不,请仔细阅读我的答案:构造函数永远不会返回 null,因此使用 `assertNotNull` 将毫无意义。这是一个永远不会失败的检查,无论你的构造函数做了什么。如果你真的想检查你的构造函数是否在不抛出异常的情况下返回,只需按照我的第一个代码片段调用它。 (2认同)