¿Cómo puedo afirmar la igualdad en dos clases sin un método igual?

Digamos que tengo una clase sin método equals (), a la que no tengo la fuente. Quiero hacer valer la igualdad en dos instancias de esa clase.

Puedo hacer afirmaciones múltiples:

assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...

No me gusta esta solución porque no obtengo la imagen de igualdad completa si falla una afirmación temprana.

Puedo comparar manualmente por mi cuenta y rastrear el resultado:

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);

Esto me da una imagen de igualdad total, pero es torpe (y ni siquiera he explicado los posibles problemas nulos). Una tercera opción es usar Comparator, pero compareTo () no me dirá qué campos no alcanzaron la igualdad.

¿Existe una práctica mejor para obtener lo que quiero del objeto, sin subclasificar y anular los iguales (ugh)?

Respuestas a la pregunta(20)

Su respuesta a la pregunta