Powiedzmy, że mam klasę bez metody equals (), do której nie ma źródła. Chcę zapewnić równość w dwóch instancjach tej klasy.
Mogę wykonać wiele potwierdzeń:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
Nie podoba mi się to rozwiązanie, ponieważ nie mam pełnego obrazu równości, jeśli wczesne potwierdzenie zawodzi.
Mogę samodzielnie samodzielnie porównać i śledzić wynik:
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);
Daje mi to pełny obraz równości, ale jest niezgrabny (i nawet nie uwzględniłem możliwych zerowych problemów). Trzecią opcją jest użycie komparatora, ale metoda compareTo () nie powie mi, które pola nie osiągnęły równości.
Czy jest lepsza praktyka, aby uzyskać to, czego chcę od obiektu, bez podklas i nadpisywania równych (ugh)?