我正在尝试使用 assertEquals(s1,s2); 比较两个字符串;我收到了比较错误<> null 预期。帮我解决这个问题。?
问问题
12141 次
2 回答
5
(你没有说你使用的是什么版本的 JUnit,这可能很重要......虽然可能不是。)
这意味着单元测试有一个表达式,其计算结果null
为 a 的expected
参数assertEquals
,而该actual
参数不计算为null
。
如果不查看您的代码,就不可能说出这真正意味着什么,但它可能是单元测试中的错误(例如,围绕错误方式的参数)或被测代码中的错误......或两者兼而有之。至于为什么你得到一个null
,这取决于单元测试和/或它正在测试的代码。您需要通过查看源代码、使用调试器等进行自己的调查。
请注意,该assertEquals
方法(见下文)使用equals
(not ) 比较对象==
,并注意避免抛出 NPE 它的一个或两个参数是null
. 所以那些建议你null
先测试的人没有抓住重点。
这是 Junit 4.4 代码:
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && isEquals(expected, actual))
return;
else if (expected instanceof String && actual instanceof String) {
String cleanMessage= message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String)expected,
(String)actual);
}
else
failNotEquals(message, expected, actual);
}
}
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
如您所见,null
案件已处理...
于 2013-05-26T00:51:10.543 回答
0
JUnit 调用 .equals() 方法来确定方法 assertEquals(Object o1, Object o2) 中的相等性。因此,使用 assertEquals(string1, string2) 绝对是安全的。(因为字符串是对象)提供的两个对象都是非空的。另一种评估它的方法是使用 assertTrue:
assertTrue(s1.equals(s2));
于 2013-05-26T00:32:30.037 回答