Java Junit:测试默认构造函数,死代码警告?
我正在尝试使用Junit测试类的默认构造函数:Java Junit:测试默认构造函数,死代码警告?,java,junit,Java,Junit,我正在尝试使用Junit测试类的默认构造函数: // testing default const public void testCaesarCipher() { CaesarCipher c1 = new CaesarCipher(); if (c1 == null) { assertTrue(false); } else { assertTrue(true); }
// testing default const
public void testCaesarCipher() {
CaesarCipher c1 = new CaesarCipher();
if (c1 == null) {
assertTrue(false);
} else {
assertTrue(true);
}
}
我得到了“死代码”的错误,我如何修复它 在该位置,
c1
不能为null
。清除if
检查
首先,构造函数调用不能返回null
。使用new…
将返回非空引用
其次,记住构造函数初始化对象。您可能要测试的是初始化是否如您预期的那样发生。在该位置,
c1
不能为null
。清除if
检查
首先,构造函数调用不能返回null
。使用new…
将返回非空引用
其次,记住构造函数初始化对象。您可能需要测试的是初始化是否按照预期进行。取消检查
c1
是否为空-这是不可能的。构造函数永远不能返回null
您可能希望测试您的构造函数是否不会引发异常-在这种情况下,只需:
public void testCaesarCipher() {
new CaesarCipher();
}
。。。很好。不过,在执行时,测试将证明构造函数返回时不会抛出异常这一事实。(当然,测试的存在是编译时检查是否存在无参数构造函数。)
我希望您的其他测试无论如何都需要调用构造函数,在这种情况下,您真的认为值得进行此测试吗
此外,如果确实希望检查某个值是否为null,则应使用:
assertNotNull(c1);
这比你的
if
/else
要清楚得多。如果您想以编程方式失败,只需调用fail()
,而不是assertTrue(false)
取消对c1
为空的检查-这是不可能的。构造函数永远不能返回null
您可能希望测试您的构造函数是否不会引发异常-在这种情况下,只需:
public void testCaesarCipher() {
new CaesarCipher();
}
。。。很好。不过,在执行时,测试将证明构造函数返回时不会抛出异常这一事实。(当然,测试的存在是编译时检查是否存在无参数构造函数。)
我希望您的其他测试无论如何都需要调用构造函数,在这种情况下,您真的认为值得进行此测试吗
此外,如果确实希望检查某个值是否为null,则应使用:
assertNotNull(c1);
这比你的
if
/else
要清楚得多。如果您想以编程方式失败,只需调用fail()
,而不是assertTrue(false)
如果为了检查测试是否有效而不需要if?@RNI2013构造函数调用不能返回null
。也许您的单元测试应该测试对象的初始化。如果不需要if来检查测试是否有效?@RNI2013构造函数调用不能返回null
。也许您的单元测试应该测试对象的初始化。谢谢,那么assertNotNull足以确保构造函数按预期工作吗?@RNI2013:不,请仔细阅读我的回答:构造函数永远不能返回null,因此使用assertNotNull
将毫无意义。这是一个永远不会失败的检查,无论你的构造函数做了什么。如果您真的想检查构造函数是否返回而不引发异常,请按照我的第一段代码调用它。谢谢,所以assertNotNull足以确保构造函数按预期工作?@RNI2013:不,请再次仔细阅读我的答案:构造函数永远不会返回null,因此,使用assertNotNull
将毫无意义。这是一个永远不会失败的检查,无论你的构造函数做了什么。如果您真的想检查构造函数是否返回而不抛出异常,只需调用它,正如我的第一个代码片段所示。