same - junit tutorial español
JUnit assertEquals() falla para dos objetos (2)
Creé una clase y sobrescribí el método equals (). Cuando uso assertTrue(obj1.equals(obj2))
, pasará la prueba; sin embargo, assertEquals(obj1, obj2)
fallará la prueba. ¿Podría alguien decir la razón por qué?
Aquí está el código para assertEquals
(de Github ):
static public void assertEquals(String message, Object expected,
Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && isEquals(expected, actual))
return;
else if (expected instanceof String && actual instanceof String) {
String cleanMessage= message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else
failNotEquals(message, expected, actual);
}
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
Solo se me ocurre un caso en el que esto se comporta de la forma en que lo describió: si su método equals
no maneja las comparaciones con valores null
correctamente.
Supongo que en realidad no has anulado a los equals
sino que lo has sobrecargado. Use la anotación @Override
para encontrar este tipo de cosas en tiempo de compilación.
En otras palabras, sospecho que tienes:
public boolean equals(MyClass other)
donde deberias tener
@Override // Force the compiler to check I''m really overriding something
public boolean equals(Object other)
En su afirmación de trabajo, sin duda estaba llamando al método sobrecargado ya que el tipo de tiempo de obj1
y obj2
eran MyClass
(o como se llame a su clase). assertEquals
de JUnit solo llamará a equals(Object)
ya que no sabe nada mejor.