Nói cách khác, không assertEquals làm việc với một lớp học đó sẽ ghi đè equals
Liệu assertEquals (Object o1, Object o2) sử dụng các bằng phương pháp
Trả lời
Từ source code of the assertEquals method mà bạn có thể tìm thấy trên 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);
}
Bạn có thể thấy rằng Junit đang sử dụng phương pháp .equals()
.
Edit:
Đoạn mã đến từ một phiên bản lỗi thời của Junit.
Bạn có thể đọc về nguồn của 'mới' Junit here. Ý tưởng này khá giống nhau, phương pháp .equals()
cũng được sử dụng.
không assertEquals làm việc với một lớp học đó sẽ ghi đè bình đẳng?
Có, assertEquals()
gọi số ghi đè equals()
nếu lớp đó có.
Có.
Object m = new Object() {
@Override
public boolean equals(Object obj) {
System.out.println("proof!");
return super.equals(obj);
}
};
Assert.assertEquals(m, m);
Vâng, nó gọi equals
và có một phương pháp riêng biệt, assertSame
, có sử dụng ==
. Chỉ cần xóa mọi thứ, assertEquals
hoạt động với bất kỳ đối tượng nào vì tất cả các đối tượng đều khai báo equals
.
JUnit là mã nguồn mở, vì vậy bạn có thể nhìn nó lên bản thân trong nguồn: 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);
}
Như bạn có thể thấy nó sử dụng equals
. Nếu bạn muốn so sánh danh tính, bạn sử dụng assertSame
.
URL mới cho nguồn Assert.java https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Assert.java – Neoheurist
có - TestNG ghi đè bằng -
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. Gọi phương pháp sử dụng Reflection on COM Object
- 2. Sử dụng phương thức equals() với String và Object trong Java
- 3. mảng Object trong chữ ký phương pháp
- 4. New {object} vs {object} = new {object}
- 5. Backbone - Object làm đã không có phương pháp 'áp dụng'
- 6. ImagesLoaded với Masonry, Object # <Object> không có phương pháp 'imagesLoaded'
- 7. jQuery của router Lỗi Loại: Object [đối tượng Object] không có phương pháp trượt
- 8. requireJS với JQuery, Masonry và ImagesLoaded: Object [object Object] không có phương thức 'imagesLoaded'
- 9. EmberJS Lỗi Loại: Object # <Object> không có phương pháp 'từ chối'
- 10. Backbone.js lỗi - lỗi chưa gặp: Object [đối tượng Object] không có phương pháp 'đặt'
- 11. của router Lỗi Loại: Object [đối tượng Object] đã không có phương pháp xác
- 12. Java Convert Object [] Array to Vector
- 13. JSON trả về [object Object]
- 14. Lịch.before (Object when), tại sao Object?
- 15. Bằng (Object obj) làm gì?
- 16. python threadsafe object object cache
- 17. "của router Lỗi Loại: Object [đối tượng Object] không có phương pháp 'tắt'" lỗi sử dụng các sự kiện khi chuyển đến xương sống 0.9.10
- 18. lỗi chưa gặp: Object # <Object> không có phương pháp 'exec' tại file: ///android_asset/www/index.html
- 19. [Object object] có nghĩa là gì? (JavaScript)
- 20. Object Pooling
- 21. php var_dump ($ object) hoặc print_r ($ object) vào tệp nhật ký
- 22. [Object Object] có nghĩa là gì?
- 23. Object :: private và Object :: public trong Ruby là gì?
- 24. OBJECT vs IFRAME nhúng video
- 25. Versioning a Ruby Object
- 26. tạo một tài liệu javascript Object
- 27. Java MongoDB Object Versioning
- 28. jqGrid Row Object trong onSelectRow
- 29. Ajax Bootstrap Popover: Object # <Object> không có phương thức 'popover'
- 30. Object Lua
Vấn đề của tôi là JUnit đã nói rằng đối tượng bằng nhau là không bằng nhau. Hóa ra là tôi đã không ghi đè 'Object.equals' đúng cách. :) Nó giúp thêm chú thích '@ Override' vào phương thức của bạn để đảm bảo rằng bạn đã thực hiện, trên thực tế, ghi đè chính xác. –