Angenommen, ich habe eine Klasse ohne equals () -Methode, für die die Quelle nicht vorhanden ist. Ich möchte die Gleichheit in zwei Fällen dieser Klasse behaupten.
Ich kann mehrere Behauptungen aufstellen:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Ich mag diese Lösung nicht, weil ich nicht das vollständige Gleichheitsbild bekomme, wenn eine frühe Behauptung fehlschlägt.
Ich kann manuell manuell vergleichen und das Ergebnis verfolgen:
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);
Dies gibt mir das vollständige Gleichheitsbild, ist aber klobig (und ich habe mögliche Nullprobleme nicht einmal berücksichtigt). Eine dritte Option ist die Verwendung von Comparator, aber compareTo () sagt mir nicht, welche Felder nicht gleich sind.
Gibt es eine bessere Methode, um das, was ich will, aus dem Objekt herauszuholen, ohne dass Unterklassen und Überschreibungen gleich sind (ugh)?
equal
sagt eine Implementierung der Methode nur aus, ob zwei Instanzen gleich sind, und es ist uns egal, warum die Intanzen nicht gleich sind.
Object
haben eine equals
Methode, Sie meinten wahrscheinlich keine überschriebene Gleichheitsmethode.