2012-06-07 6 views
11

Chciałbym móc drukować w dziennikach komunikat, dla którego pomysł intelli zaprezentowałby ładny sposób porównywania dwóch obiektów (ciągów). Dzieje się to automatycznie na komunikat o błędzie rejestrowane przez nieudanej junit assert:Formatowanie danych wyjściowych tak, aby Intellij Idea wyświetlał różnice dla dwóch tekstów.

 
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) 

< Kliknij aby zobaczyć różnicę > wpis jest faktycznie wyświetlany jako link w oknie wyjściowym IntelliJ IDEA. Kiedy klikniesz na link, otworzy się okno porównania, które pokazuje dwie wartości (tak jak porównałbyś dwa pliki).

Po prostu wyrzucenie wyjątku jest nie do przyjęcia, ponieważ chciałbym zarejestrować wiele obiektów do porównania. Próbowałem już zalogować tekst, ale nie udało mi się przekonać pomysłu do porównania obu tekstów.

Odpowiedz

19

IntelliJ IDEA używa zakodowanego na stałe wyrażenia regularnego. Jeśli tekst pasuje do wzorca, zaproponuje kliknięcie, aby zobaczyć różnicę.

Wzór jest:

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

wyjściowa powinny odpowiadać format assertEquals lub assertThat.

Dokładne wzorce są nieco rozrzucone wokół kodu w IDEA, ale niektóre są np. here.

+2

Sądzę, że obie wartości muszą również być przenoszone przez cytaty. – yankee

+0

@yankee W rzeczywistości, patrząc na wzór regex, nie wydaje się to konieczne. – sschuberth

+0

Brak konieczności cytowania, ale musiałem dodać spację po: aby to działało. A więc: "oczekiwano: , ale było: " –