Como afirmo a igualdade em duas classes sem um método igual?

Digamos que eu tenha uma classe sem o método equals (), para a qual não tenha a origem. Eu quero afirmar a igualdade em duas instâncias dessa classe.

Eu posso fazer várias afirmações:

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

Eu não gosto desta solução porque não obtenho a imagem completa da igualdade se uma afirmação inicial falhar.

Eu posso comparar manualmente por conta própria e acompanhar o 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);

Isso me dá o quadro completo da igualdade, mas é desajeitado (e eu nem sequer considerei possíveis problemas nulos). Uma terceira opção é usar o Comparator, mas compareTo () não me informará quais campos falharam na igualdade.

Existe uma prática melhor para obter o que eu quero do objeto, sem subclassing e overridding igual (ugh)?

questionAnswers(20)

yourAnswerToTheQuestion