unitaria tutorial same prueba library example español ejemplos con assertnotequals assertequals assertarrayequals junit equals

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.