我創建了一個類並重寫了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. 對象持久化後Hibernate assertEquals失敗
- 3. 當比較兩個對象時,JUnit assertEquals()不起作用
- 4. 失敗的assertEquals兩個矢量
- 5. 使用assertEquals時發生意外的JUnit測試失敗
- 6. assertEquals()失敗的原因
- 7. 失敗的assertEquals兩個看似相同的字符串
- 8. Junit測試用例對抽象方法失敗
- 9. Javascript日期對象失敗
- 10. 對象範圍失敗
- 11. 創建對象「wscript.shell」失敗
- 12. JS:對象迭代失敗
- 13. 創建對象失敗ELEMRIDXNOTFOUND
- 14. 對象的Assert.AreEqual()失敗
- 15. Server.Create對象失敗錯誤
- 16. c#對象比較失敗
- 17. Java的兩個Set對象 - hashCode()是相同的,但.equals()失敗
- 18. 插入兩個相關的對象在SQLAlchemy中失敗
- 19. 兩個ActiveSupport :: TimeWithZone對象之間的比較失敗
- 20. 當減去兩個日期時間對象tostring失敗
- 21. C++分配另一個對象的對象值失敗
- 22. 如果一個對象失敗所有對象回滾
- 23. JUnit TestCase失敗
- 24. JUnit - IllegalArgumentException.class失敗?
- 25. assertEquals比較對象id而不是對象的內容?
- 26. 是否的assertEquals(對象01,對象02)使用equals方法
- 27. junit模擬對象
- 28. JUnit,比較對象
- 29. 有兩種方法的jUnit失敗
- 30. 當對象B失敗時,如何使對象A失敗驗證
我們需要看到equals方法的代碼 – hvgotcodes 2011-05-19 15:18:13
'obj1'和'obj2'是同一類型嗎? – 2011-05-19 15:18:39
您是否在調試模式下嘗試使用assertEquals重寫的相等值? – VirtualTroll 2011-05-19 15:19:15