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