使用assertEquals和Comparison Failure窗口时,如何显示对象字段而不是引用

时间:2018-02-01 14:33:02

标签: java intellij-idea junit

当我尝试使用JUnit的assertEquals方法比较同一类对象的两个相似列表时,我在Intellij中得到了选项:

<Click to see difference>

“比较失败”对话框打开,我看到了预期的引用和实际引用。我已正确覆盖了equals方法,因为当两个对象具有相同的字段时,测试会通过。

是否可以显示对象的字段,而不是显示引用?

这将大大减少调试测试用例所需的时间。

http://appcelerator.com/android-sdk

1 个答案:

答案 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显示:

enter image description here