java - how - Does assertEquals(Object o1, Object o2) usa el método equals
junit array equals (6)
En otras palabras, ¿assertEquals funciona con una clase que anula equals
¿assertEquals funciona con una clase que anula iguales?
Sí, assertEquals()
invoca los equals()
reemplazados equals()
si la clase tiene uno.
Desde el código fuente del método assertEquals que puedes encontrar en Junit GitHub Repo :
/**
* Asserts that two objects are equal. If they are not
* an AssertionFailedError is thrown with the given message.
*/
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null) {
return;
}
if (expected != null && expected.equals(actual)) {
return;
}
failNotEquals(message, expected, actual);
}
Puedes ver que Junit está usando el método .equals()
.
Editar:
El fragmento de código proviene de una versión obsoleta de Junit.
Puedes leer sobre la fuente del ''nuevo'' Junit here . La idea es prácticamente la misma, el método .equals()
también se usa.
JUnit es de código abierto, por lo que podría haberlo buscado usted mismo en la fuente: https://github.com/junit-team/junit4/blob/master/src/main/java/org/junit/Assert.java
static public void assertEquals(String message, Object expected,
Object actual) {
if (equalsRegardingNull(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 equalsRegardingNull(Object expected, Object actual) {
if (expected == null) {
return actual == null;
}
return isEquals(expected, actual);
}
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
Entonces, como pueden ver, usa equals
. Si desea comparar identidad, usa assertSame
.
Sí lo hace.
Object m = new Object() {
@Override
public boolean equals(Object obj) {
System.out.println("proof!");
return super.equals(obj);
}
};
Assert.assertEquals(m, m);
Sí, llama a equals
y hay un método separado, assertSame
, que usa ==
. Para aclarar las cosas, assertEquals
funciona con cualquier objeto, ya que todos los objetos declaran equals
.
sí - TestNG anula igual a -
static public void assertEquals(Object actual, Object expected, String message) {
if((expected == null) && (actual == null)) {
return;
}
if(expected != null) {
if (expected.getClass().isArray()) {
assertArrayEquals(actual, expected, message);
return;
} else if (expected.equals(actual)) {
return;
}
}
failNotEquals(actual, expected, message);
}