換句話說,不工作的assertEquals與覆蓋equals
是否的assertEquals(對象01,對象02)使用equals方法
回答
從source code of the assertEquals method,你可以找到Junit GitHub Repo:
/**
* Asserts that two objects are equal. If they are not
* an AssertionFailedError is thrown with the given message.
*/
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null) {
return;
}
if (expected != null && expected.equals(actual)) {
return;
}
failNotEquals(message, expected, actual);
}
你可以看到,JUnit是使用.equals()
方法。
編輯:
的代碼片段從Junit的一個過時版本的到來。
你可以閱讀關於'新'Junit here的來源。這個想法幾乎相同,也使用.equals()
方法。
做的assertEquals與覆蓋等於類的工作一類?
是的,assertEquals()
如果類有一個,則調用覆蓋的equals()
。
是的。
Object m = new Object() {
@Override
public boolean equals(Object obj) {
System.out.println("proof!");
return super.equals(obj);
}
};
Assert.assertEquals(m, m);
是的,它會調用equals
並有一個單獨的方法,assertSame
,使用==
。只是爲了清除事情,assertEquals
與任何對象,因爲所有對象聲明equals
。
JUnit是開源的,所以你可以在源都看着它自己:https://github.com/junit-team/junit4/blob/master/src/main/java/org/junit/Assert.java
static public void assertEquals(String message, Object expected,
Object actual) {
if (equalsRegardingNull(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 equalsRegardingNull(Object expected, Object actual) {
if (expected == null) {
return actual == null;
}
return isEquals(expected, actual);
}
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
所以,你可以看到它使用equals
。如果您想比較身份,請使用assertSame
。
Assert.java源的新URL https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Assert.java – Neoheurist
是 - TestNG的覆蓋equals方法 -
static public void assertEquals(Object actual, Object expected, String message) {
if((expected == null) && (actual == null)) {
return;
}
if(expected != null) {
if (expected.getClass().isArray()) {
assertArrayEquals(actual, expected, message);
return;
} else if (expected.equals(actual)) {
return;
}
}
failNotEquals(actual, expected, message);
}
- 1. Java對象中的HashCode和Equals方法
- 2. 領域對象的equals方法
- 3. 的Equals的對象
- 4. equals方法二進制對象
- 5. 對掃描器對象使用.equals()
- 6. assertEquals比較對象id而不是對象的內容?
- 7. 爲什麼listbox1.Items.Add使用我的對象的Equals方法?
- 8. 對象使用的equals()的字符串方法
- 9. 使用equals和hashCode方法比較對象的動態字段
- 10. 使用equals方法獲取列表<Object>中的對象?
- 11. equals方法對兩個對象返回true哈希方法返回兩個對象的不同值是OK
- 12. Java作業:在對象數組中使用equals方法
- 13. JUnit assertEquals()對兩個對象失敗
- 14. equals()方法被調用現有對象或傳入對象在集合
- 15. .equals()==還是比較類當對象的
- 16. PHP是否序列化對象方法?
- 17. 使用對象方法
- 18. Prestashop - 用01. 02. 03
- 19. SOAP :: Lite無法使用SOAP對象的對象方法
- 20. 忽略equals(對象O)
- 21. 對於null對象有方法返回值是否有用?
- 22. 對象是一個方法
- 23. 使用對象的方法設置對象的屬性值
- 24. Entity的@Override Equals方法中的對象null
- 25. 在FLash AS3中,即使未使用對象的方法,擴展對象是否使用更多的內存?
- 26. JUnit4(assertEquals)說對象是不同的,當它們是相同的?
- 27. 對象是否可以知道從哪個對象調用其方法?
- 28. 對象持久化後Hibernate assertEquals失敗
- 29. 檢查委託是否是對象的方法,並檢索此對象引用和方法名稱
- 30. 對象是否存在? JavaScript對象
我的問題是,JUnit的是說,等於對象是不相等的。原來,我沒有正確覆蓋Object.equals。 :)它有助於將'@ Override'註釋添加到您的方法中,以確保您確實可以正確覆蓋。 –