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

bot*_*ius 19 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)

<Click to see difference>条目实际上显示为Intellij Idea输出窗口中的链接.当您单击该链接时,将打开一个比较窗口,其中显示了两个值(就像您比较两个文件一样).

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

Cra*_*der 29

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

模式是:

expected:<bla-blah> but was:<blah-blah-blah>
Run Code Online (Sandbox Code Playgroud)

输出应与assertEquals或的格式匹配assertThat.

确切的模式在IDEA的代码中有点分散,但有些例如在这里.

  • 我认为这两个值也需要用引号来润滑. (2认同)
  • 这应该还行吗?我想我找到了[新模式](https://github.com/JetBrains/intellij-community/blob/ea2b2d7677106b8d7cdd26d499e5ddd57c73f7f5/plugins/junit_rt/src/com/intellij/junit4/ExpectedPatterns.java#L34)但我不知道看到任何差异按钮.我是否还需要崩溃和/或通过JUnit运行它来查看差异链接? (2认同)

Sim*_*0rn 5

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

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