Скажіть, у мене є клас, що не має методу equals (), до якого немає джерела. Я хочу стверджувати рівність на двох примірниках цього класу.
Я можу зробити кілька тверджень:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Мені не подобається це рішення, тому що я не отримую повного уявлення про рівність, якщо ранні ствердження не вдається.
Я можу вручну порівнювати самостійно і відстежувати результат:
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);
Це дає мені повну картину рівності, але незграбна (і я навіть не враховувала можливих нульових проблем). Третім варіантом є використання компаратора, але параметрTo () не скаже мені, у яких полях не було рівності.
Чи є краща практика отримати те, що я хочу від об'єкта, без підкласифікації та переосмислення рівних (тьфу)?
equal
методу говорить лише про те, що два екземпляри рівні, і нас не хвилює, чому ідентичні дані не рівні.
Object
є equals
метод, ви, мабуть, мали на увазі відсутність методу, що переосмислюється, дорівнює