Как я могу утверждать равенство на двух классах без метода равенства?

Скажем, у меня есть класс без метода 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 () не скажет мне, какие поля потерпели неудачу в равенстве.

Есть ли лучшая практика, чтобы получить то, что я хочу от объекта, без подклассов и переопределения равных (тьфу)?

Ответы на вопрос(19)

Ваш ответ на вопрос