Digamos que eu tenha uma classe sem o método equals (), para a qual não tenho a fonte. Eu quero afirmar a igualdade em duas instâncias dessa classe.
Posso fazer várias afirmações:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Não gosto dessa solução porque não consigo entender o quadro completo da igualdade se uma declaração inicial falhar.
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á uma imagem completa da igualdade, mas é desajeitado (e eu nem mesmo considerei os possíveis problemas nulos). Uma terceira opção é usar Comparator, mas compareTo () não me dirá quais campos falharam na igualdade.
Existe uma prática melhor para obter o que desejo do objeto, sem subclassificar e substituir equals (ugh)?
equalmétodo apenas informa se duas instâncias são iguais e não nos importamos por que as intâncias não são iguais.
Objects têm um equalsmétodo, você provavelmente não quis dizer nenhum método igual a substituído.