Giả sử tôi có một lớp không có phương thức equals (), mà không có nguồn. Tôi muốn khẳng định sự bình đẳng trên hai trường hợp của lớp đó.
Tôi có thể thực hiện nhiều xác nhận:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Tôi không thích giải pháp này vì tôi không có được bức tranh bình đẳng đầy đủ nếu một khẳng định sớm không thành công.
Tôi có thể tự mình so sánh thủ công và theo dõi kết quả:
String errorStr = "";
if(!obj1.getFieldA().equals(obj2.getFieldA())) {
errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n";
}
if(!obj1.getFieldB().equals(obj2.getFieldB())) {
errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + "\n";
}
...
assertEquals("", errorStr);
Điều này mang lại cho tôi bức tranh bình đẳng đầy đủ, nhưng thật khó hiểu (và tôi thậm chí chưa tính đến các vấn đề rỗng có thể xảy ra). Tùy chọn thứ ba là sử dụng Bộ so sánh, nhưng so sánhTo () sẽ không cho tôi biết trường nào không bình đẳng.
Có cách nào tốt hơn để lấy những gì tôi muốn từ đối tượng mà không cần phân lớp con và ghi đè bằng (ugh) không?
equal
phương thức chỉ cho biết liệu hai trường hợp có bằng nhau hay không và chúng tôi không quan tâm tại sao các nội dung lại không bằng nhau.
Object
s đều có một equals
phương thức, có thể bạn muốn nói rằng không có phương thức nào bị ghi đè.