2012-06-07 25 views
11

我希望能夠在日誌中打印一條消息,其中intellij想法會提供比較兩個對象(字符串)的好方法。這是自動通過一個失敗的JUnit斷言記錄的錯誤消息:格式化輸出,以便Intellij Idea顯示兩個文本的差異

 
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) 

的<點擊查看差異>進入實際顯示爲IntelliJ IDEA的輸出窗口中的鏈接。當你點擊鏈接時,會打開一個比較窗口,顯示兩個值(就像比較兩個文件一樣)。

簡單地拋出異常是不可接受的,因爲我想記錄多個對象進行比較。我已經嘗試過記錄文本,但是我無法說服想法比較這兩個文本。

回答

19

IntelliJ IDEA正在使用硬編碼的正則表達式。如果文本與模式匹配,則會建議單擊以查看差異。

的模式是:

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

輸出應該匹配的assertEqualsassertThat的格式。

確切的模式有點散佈在IDEA的代碼中,但有些例如here

+2

我認爲這兩個值都需要用引號引起來。 – yankee

+0

@yankee其實,在查看正則表達式模式時,似乎並不需要。 – sschuberth

+0

沒有必要的引號,但我不得不在後添加一個空格:爲此工作。所以:'預計:但是:' –