我想比較兩個字符串使用assertEquals(s1,s2); 我收到比較錯誤<> null預計在它。 幫我解決這個問題。什麼是比較失敗,JUnit中預期爲null?
回答
(你不說你使用的是什麼版本的JUnit,它可能關係......雖然可能不是)
這意味着,單元測試的表達式的計算結果爲null
,作爲assertEquals
的參數expected
,並且actual
參數不計算爲null
。
如果不查看代碼,這是不可能的,但它可能是單元測試中的錯誤(例如,圍繞錯誤方式的參數)或代碼中的錯誤。 。 或兩者。至於爲什麼你得到一個null
,這取決於單元測試和/或它正在測試的代碼。您需要通過查看源代碼,使用調試器等來進行自己的調查。
注意,assertEquals
方法(見下文)比較了使用equals
(未==
)對象和需要小心以避免拋出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
案件處理...
JUnit調用.equals()方法來確定方法assertEquals(Object o1,Object o2)中的相等性。所以,你絕對安全使用assertEquals(string1,string2)。 (因爲字符串是對象)提供的對象都是非空的。評估它的另一種方法是使用assertTrue:
assertTrue(s1.equals(s2));
實際上,建議使用assertEquals而不是assertTrue來檢查斷言失敗時兩個對象作爲消息的相等性是否更容易解釋。 –
這個陳述也是有問題的:*「assertEquals檢查對象是否相等,比較字符串與平等不是一個好主意」*。事實上,'assertEquals'使用'Object.equals' ...並且這是比較字符串的正確方法**。 (它不使用'=='...讀取代碼和javadocs。)。如果你實際上在談論使用'assertTrue'的正確方法:1)這並不明顯,2)'assertTrue'是一個紅鯡魚,'因爲他沒有使用它,3)這是一個壞主意;請參閱Pangea的評論。 –
- 1. 爲什麼我的比較失敗?
- 2. 爲什麼這個PHP比較失敗?
- 3. 爲什麼這個比較失敗
- 4. 爲什麼浮動值比較失敗?
- 5. 爲什麼我的比較爲null,包含在System.Data.DataRow對象中的值失敗?
- 6. 日期比較失敗
- 7. Junit測試:什麼是失敗?
- 8. oracle比較日期爲null
- 9. 爲什麼我的Junit-AssertionError-Test失敗?
- 10. 重寫Equals()與null的比較失敗?
- 11. Jenkins Sonar失敗JUnit版本爲null
- 12. 在JavaScript中比較新日期失敗
- 13. 爲什麼Perl中的base64字符串比較失敗?
- 14. 爲什麼字符串比較在我的代碼中失敗?
- 15. 比較失敗
- 16. 比較失敗
- 17. jUnit比較XML字符串失敗,即使XML是相同的
- 18. 比較日期:「日期與零比較失敗」
- 19. Junit預計異常失敗
- 20. 與null,null相比,爲什麼不是零日期?
- 21. 測試失敗「的說法預期」比較時「(」
- 22. JUnit測試失敗,但結果是預期的嗎?
- 23. 爲什麼int不能與null比較,但Integer可以與null比較
- 24. 爲什麼這種顏色比較失敗?
- 25. 爲什麼我的條件比較字符串失敗?
- 26. rspec - 爲什麼數組鍵比較失敗?
- 27. 爲什麼這個for循環比較失敗後的字母
- 28. 爲什麼這個動態列表比較失敗?
- 29. 爲什麼我的java時間比較失敗?
- 30. 爲什麼這個numpy數組比較失敗?
哪裏是代碼? –
使用調試器來確保兩個字符串都是非空的。或者在測試之前打印出值。 – Marvo
是否有可能使用unicode字符,如[在這裏](http://stackoverflow.com/questions/4237581/comparing-unicode-characters-in-junit)? –