换句话说,assertEquals是否适用于覆盖equals
的类
答案 0 :(得分:37)
您可以在source code of the assertEquals method上找到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);
}
您可以看到Junit正在使用.equals()
方法。
修改强>
代码段来自Junit的弃用版本。
您可以阅读有关'新'Junit here的来源。这个想法几乎相同,也使用了.equals()
方法。
答案 1 :(得分:7)
assertEquals是否适用于覆盖等于的类?
是的,如果班级有assertEquals()
,equals()
会调用被覆盖的{{1}}。
答案 2 :(得分:4)
是的,它会调用equals
,并且有一个使用assertSame
的单独方法==
。只是为了清理,assertEquals
适用于任何对象,因为所有对象都声明equals
。
答案 3 :(得分:2)
是的。
Object m = new Object() {
@Override
public boolean equals(Object obj) {
System.out.println("proof!");
return super.equals(obj);
}
};
Assert.assertEquals(m, m);
答案 4 :(得分:1)
JUnit是开源的,所以你可以在源代码中自己查找: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);
}
因此,您可以看到它使用equals
。如果您想比较身份,请使用assertSame
。
答案 5 :(得分:1)
是 - TestNG覆盖等于 -
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);
}