我創建了一個類並重寫了equals()方法。當我使用assertTrue(obj1.equals(obj2))
時,它會通過測試;但是,assertEquals(obj1, obj2)
將無法通過測試。有人可以告訴原因嗎?JUnit assertEquals()對兩個對象失敗
回答
我的猜測是,你有沒有實際上覆蓋equals
- 你已經超載它來代替。在編譯時使用@Override
註釋來找出這種東西。
換句話說,我懷疑你有:
public boolean equals(MyClass other)
,你應該有:
@Override // Force the compiler to check I'm really overriding something
public boolean equals(Object other)
在你的工作斷言,你無疑調用重載方法obj1
和obj2
的編譯時間類型都是MyClass
(或不管你的類被稱爲)。 JUnit的assertEquals
只會呼叫equals(Object)
,因爲它不知道更好。
它在我將公共布爾等於(MyClass其他)更改爲公共布爾等於(對象其他)時起作用。謝謝喬恩。 – 2011-05-19 15:33:03
@nikel:'Date'是可變的,這使得很難很好地實現平等 - 你可以有一個'HashSet
重新添加評論 - 我想知道爲什麼日期不會覆蓋其等於執行... – nikel 2015-05-13 10:41:34
這裏是assertEquals
代碼(從Github):
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);
}
我能想到的只有一個情況下這種行爲你描述的方式 - 如果你的equals
方法不正確處理攀比null
值。
你假設JUnit調用的'equals'與傳入版本中調用的'equals'是一樣的...... – 2011-05-19 15:23:54
@Jon是的,只是注意到你已經正確地猜到了這個問題。 – 2011-05-22 06:52:46
- 1. 的JUnit的assertEquals失敗
- 2. Server.Create對象失敗錯誤
- 3. 創建對象「wscript.shell」失敗
- 4. 對象範圍失敗
- 5. c#對象比較失敗
- 6. JS:對象迭代失敗
- 7. Java的兩個Set對象 - hashCode()是相同的,但.equals()失敗
- 8. 當減去兩個日期時間對象tostring失敗
- 9. 插入兩個相關的對象在SQLAlchemy中失敗
- 10. 如果一個對象失敗所有對象回滾
- 11. JUnit TestCase失敗
- 12. assertEquals比較對象id而不是對象的內容?
- 13. 有兩種方法的jUnit失敗
- 14. junit模擬對象
- 15. 當對象B失敗時,如何使對象A失敗驗證
- 16. JUnit測試問題:: assertEquals()
- 17. 爲什麼我的'AssertEquals()'方法失敗?
- 18. 的assertEquals失敗,因爲多線
- 19. 硒的webdriver - 兩個部分 - 一)未對失敗的assertEquals測試2)確認元素不存在
- 20. Mockito verifyNoMoreInteractions()使用assertEquals()時失敗的測試失敗()
- 21. Junit因Aspect失敗
- 22. JUnit測試失敗
- 23. 兩個對象中的通用對象
- 24. EF 4.1和兩級對象插入失敗
- 25. CodeContracts:ccrewrite失敗,對象引用未設置爲對象的實例
- 26. Javascript數組對象失敗拋出「對象錯誤」,在IE
- 27. Grails:在創建新對象時驗證域對象失敗
- 28. 保存子對象時,要保存防止父對象失敗
- 29. Ember.js - 西蘭花插件:[對象對象]失敗:
- 30. 同一個對象的Junit測試
我們需要看到equals方法的代碼 – hvgotcodes 2011-05-19 15:18:13
'obj1'和'obj2'是同一類型嗎? – 2011-05-19 15:18:39
您是否在調試模式下嘗試使用assertEquals重寫的相等值? – VirtualTroll 2011-05-19 15:19:15