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