/**
* 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);
}
8条答案
按热度按时间xa9qqrwz1#
从source code of the assertEquals method中,您可以在Junit GitHub Repo上找到:
字符串
您可以看到Junit正在使用
.equals()
方法。编辑:
代码片段来自Junit的一个弃用版本。
您可以阅读有关'新' Junit here的源代码。其思想几乎相同,也使用了
.equals()
方法。kjthegm62#
assertEquals是否适用于重写equals的类?
是的,
assertEquals()
调用重写的equals()
(如果类有)。gcuhipw93#
是的,它调用了
equals
,还有一个单独的方法assertSame
,它使用了==
。只是为了澄清一下,assertEquals
适用于 * 任何 * 对象,因为所有对象都声明了equals
。i86rm4rw4#
是的。
字符串
h4cxqtbf5#
是- TestNG覆盖等于-
字符串
shyt4zoc6#
JUnit是开源的,因此您可以自己在源代码中查找它:https://github.com/junit-team/junit4/blob/master/src/main/java/org/junit/Assert.java
字符串
如你所见,它使用
equals
,如果你想比较恒等式,你可以使用assertSame
。elcex8rz7#
一般来说,答案是肯定的,但是除非文档明确指定了Assert方法的行为,否则您不应该假设在所有情况下都调用
equals
。例如,当expected == actual
或actual == null
时,Assert方法可能会快速返回,而根本不调用equals
。JUnit 5的
Assertions
class明确地提到了这一点:比较两个对象是否相等的Assert方法,例如
assertEquals(expected, actual)
和assertNotEquals(unexpected, actual)
变体,只是为了测试(非)预期值和实际值是否相等。它们不是为了测试类是否正确实现Object.equals(Object)
而设计的。例如,assertEquals()
在为期望值和实际值提供相同的对象时可能立即返回true
,而不调用equals(Object)
。旨在验证equals(Object)
实现的测试应该改为使用assertTrue()
或assertFalse()
-例如,assertTrue(expected.equals(actual))
、assertTrue(actual.equals(expected))
、assertFalse(expected.equals(null))
等。lfapxunr8#
我在集成测试中使用chai assert,它有一个deepEqual,可以做OP想要的事情。
字符串
...
型