Digamos que tengo una clase sin método equals (), para la cual no tengo la fuente. Quiero afirmar la igualdad en dos instancias de esa clase.
Puedo hacer varias afirmaciones:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
No me gusta esta solución porque no obtengo la imagen de igualdad completa si falla una afirmación temprana.
Puedo comparar manualmente por mi cuenta y rastrear el resultado:
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);
Esto me da una imagen de igualdad completa, pero es torpe (y ni siquiera he tenido en cuenta los posibles problemas de nulos). Una tercera opción es usar Comparator, pero compareTo () no me dirá qué campos fallaron en la igualdad.
¿Existe una mejor práctica para obtener lo que quiero del objeto, sin subclasificar y anular iguales (ugh)?
equalmétodo solo dice si dos instancias son iguales y no nos importa por qué las intancias no son iguales.
Objects tienen un equalsmétodo, probablemente quiso decir que ningún método es igual a anulado.