mal*_*rdz 3 java arrays tdd junit equals
我正在按照Kent Beck的测试驱动开发示例.
相关章节可在此处在线预览.
肯特写道:
我们可以使用包含两种货币的双元素数组作为关键字吗?Array.equals()是否检查元素是否相等?
public void testArrayEquals() {
assertEquals(new Object[] {"abc"}, new Object[] {"abc"});
}
Run Code Online (Sandbox Code Playgroud)
不.测试失败,因此我们必须为密钥创建一个真实对象
但是,当我运行测试时它会通过.
我认为assertEquals会检查Array.equals(),它检查相同的对象而不是内容,因此测试会失败,但它不会(至少不适合我).
另一方面:
System.out.println( new Object[]{"abc"}.equals(new Object[]{"abc"}) );
Run Code Online (Sandbox Code Playgroud)
按预期打印错误...
Eclipse告诉我,assertEquals(Object [],Object [])现在已被弃用,但为了理解,为什么现在测试通过了?
数组不会覆盖equals,因此您可以获得引用相等 - 这就是您的System.out.println调用打印的原因false.但是,JUnit的方法断言数组在逻辑上是相等的,即它们的大小相同,并且它们中的每个元素对是相等的.当你编写涉及数组的测试时,这几乎总是你想要的.
我怀疑肯特在JUnit有这种有用的行为之前写了那本书.(事实上,我希望这本书能够超越现有的超载.)
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |