我正在关注 Kent Beck 的测试驱动开发示例。
相关章节可见a preview online here .
肯特写道:
Can we use a two-element array containing the two currencies as the key? Does Array.equals() check to see if the elements are equal?
public void testArrayEquals() {
assertEquals(new Object[] {"abc"}, new Object[] {"abc"});
}
Nope. The test fails, so we have to create a real object for the key
但是当我运行测试时它通过了。
我认为 assertEquals 会检查 Array.equals() ,它检查的是同一个对象,而不是内容,因此测试会失败,但事实并非如此(至少对我而言不是)。
另一方面:
System.out.println( new Object[]{"abc"}.equals(new Object[]{"abc"}) );
按预期打印 false...
Eclipse 告诉我 assertEquals(Object[], Object[]) 现在已弃用,但为了便于理解,为什么我现在测试通过了?
最佳答案
数组不会覆盖 equals
,因此您获得引用相等性 - 这就是您的 System.out.println
调用打印 false
的原因。但是,JUnit 的方法断言数组逻辑上 相等,即它们的大小相同,并且其中的每个元素对都相等。当您编写涉及数组的测试时,这几乎总是您想要的。
不过,我怀疑 Kent 在 JUnit 具有这种有用的行为之前写了那本书的一部分。 (事实上 ,我希望这本书早于存在的重载。)
关于java - 为什么 assertEquals(new Object[] {"abc"}, new Object[] {"abc"});不失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23467836/