Supponiamo di avere una classe senza il metodo equals (), di cui non ho il sorgente. Voglio affermare l'uguaglianza su due istanze di quella classe.
Posso fare più affermazioni:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Non mi piace questa soluzione perché non ottengo il quadro completo dell'uguaglianza se un'asserzione iniziale fallisce.
Posso confrontare manualmente da solo e monitorare il risultato:
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);
Questo mi dà il quadro completo dell'uguaglianza, ma è goffo (e non ho nemmeno tenuto conto di possibili problemi nulli). Una terza opzione è usare Comparator, ma compareTo () non mi dirà quali campi hanno fallito l'uguaglianza.
Esiste una pratica migliore per ottenere ciò che voglio dall'oggetto, senza sottoclassare e sovrascrivere gli uguali (ugh)?
equal
metodo dice solo se due istanze sono uguali e non ci interessa perché le intance non sono uguali.
Object
hanno un equals
metodo, probabilmente non intendevi nessun metodo uguale a sovrascrittura.