Disons que j'ai une classe sans méthode equals (), dont je n'ai pas la source. Je veux affirmer l'égalité sur deux instances de cette classe.
Je peux faire plusieurs assertions:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Je n'aime pas cette solution parce que je n'obtiens pas une image complète de l'égalité si une affirmation précoce échoue.
Je peux comparer manuellement et suivre le résultat:
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);
Cela me donne une image complète de l'égalité, mais c'est maladroit (et je n'ai même pas pris en compte d'éventuels problèmes de nullité). Une troisième option consiste à utiliser Comparator, mais compareTo () ne me dira pas quels champs ont échoué à l'égalité.
Existe-t-il une meilleure pratique pour obtenir ce que je veux de l'objet, sans sous-classer ni surcharger les égaux (ugh)?
equal
méthode indique seulement si deux instances sont égales, et nous ne nous soucions pas de savoir pourquoi les intances ne sont pas égales.
Object
ont une equals
méthode, vous vouliez probablement dire aucune méthode égale remplacée.