Скажем, у меня есть класс без метода 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);
Это дает мне полную картину равенства, но неуклюжий (и я даже не учитывал возможных нулевых проблем). Третий вариант - использовать Comparator, но compareTo() не скажет мне, какие поля не получили равенства.
Есть ли лучшая практика для получения того, что я хочу от объекта, без подкласса и переопределения равных (ugh)?