格式化输出,以便Intellij Idea显示两个文本的差异

时间:2012-06-07 15:18:27

标签: intellij-idea

我希望能够在日志中打印一条消息,其中intellij想法将提供一种比较两个对象(字符串)的好方法。对于由失败的junit断言记录的错误消息,这会自动发生:

assertEquals("some\nString", "another\nString");

=>
org.junit.ComparisonFailure:  <Click to see difference>
    at org.junit.Assert.assertEquals(Assert.java:123)
    at org.junit.Assert.assertEquals(Assert.java:145)
    at com.something.DummyTest.testDummy(DummyTest.java:89)

&lt;点击查看差异&gt;条目实际上显示为Intellij Idea输出窗口中的链接。当您单击该链接时,将打开一个比较窗口,其中显示了两个值(就像您比较两个文件一样)。

简单地抛出异常是不可接受的,因为我想记录多个对象进行比较。我已经尝试过记录文本,但我无法说服想法比较这两个文本。

2 个答案:

答案 0 :(得分:25)

IntelliJ IDEA正在使用硬编码的正则表达式。如果文本与模式匹配,则建议单击以查看差异。

模式是:

expected:<bla-blah> but was:<blah-blah-blah>

输出应与assertEqualsassertThat

的格式相匹配

确切的模式在IDEA的代码中有些分散,但有些例如是here

答案 1 :(得分:1)

我遇到了同样的问题,并在https://github.com/joel-costigliola/assertj-core/issues/1364#issuecomment-440800958中找到了解决方法

您应该抛出org.junit.ComparisonFailure。然后IntelliJ将显示<Click to see difference>