java - 为什么 assertEquals(new Object[] {"abc"}, new Object[] {"abc"});不失败?

标签 java arrays junit tdd equals

我正在关注 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/

相关文章:

java - 使用 Javatar 在 Sublime Text 3 上导入外部 jar

java - 保存 Mockito 发现的信息

java - 对于 ajax 按钮,如何在 WebElement.click() 之后避免 StaleElementException?

java - 为 if else block 编写 jUnit 测试用例

java - 如何使用给定的 String[][] 和预期的 String[][] 返回来计算平均成绩

java - 助手/实用程序类应该是抽象的吗?

java - 如何注释数组 NonNull?

php - 从 MySQL 填充两列 HTML

java - 数组索引越界项目欧拉问题 17

c - 二维数组 - C 中的无效初始值设定项?