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 des assertions multiples :
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Je n'aime pas cette solution car je n'obtiens pas l'image complète de l'égalité si une assert précoce échoue.
Je peux comparer manuellement par moi-même 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 lourd (et je n'ai même pas pris en compte les éventuels problèmes de nullité). Une troisième option consiste à utiliser un comparateur, mais compareTo() ne me dira pas quels champs n'ont pas respecté l'égalité.
Existe-t-il une meilleure pratique pour obtenir ce que je veux de l'objet, sans sous-classer et écraser les égalités (ugh) ?