当我尝试使用JUnit的assertEquals
方法比较同一类对象的两个相似列表时,我在Intellij中得到了选项:
<Click to see difference>
“比较失败”对话框打开,我看到了预期的引用和实际引用。我已正确覆盖了equals方法,因为当两个对象具有相同的字段时,测试会通过。
是否可以显示对象的字段,而不是显示引用?
这将大大减少调试测试用例所需的时间。
答案 0 :(得分:2)
<强> TL; DR 强>
在toString()
上实施Models.YTPoint
,IntelliJ将能够显示有意义的“差异消息”。
<强>详细强>
IntelliJ的“差异消息”源自类型toString()
。如果类型没有toString()
,则IntelliJ将使用对象引用。
因此,如果您在这些列表包含的任何对象上定义toString()
,那么IntelliJ将能够显示有意义的“差异消息”。
这是一个例子:
@Test
public void showDifferenceMessage() {
List<Foo> one = Lists.newArrayList(new Foo(1, "me"));
List<Foo> two = Lists.newArrayList(new Foo(1, "you"));
Assert.assertEquals(one, two);
}
当我运行测试IntelliJ显示时没有Foo.toString()
的实现:
java.lang.AssertionError:
Expected :[org.glytching.sandbox.Foo@16f65612]
Actual :[org.glytching.sandbox.Foo@311d617d]
当我实现Foo.toString()
并重新运行IntelliJ显示的测试时:
java.lang.AssertionError:
Expected :[Foo{id=1, name='me'}]
Actual :[Foo{id=1, name='you'}]
如果我Click to see difference
IntelliJ显示: