2016-03-31 12 views
6

ich das folgende Szenario konfrontiert:assertEquals (String, String) ComparisonFailure wenn Inhalte identisch sind

Ich habe eine Anwendung, die dies alles, um den STDOUT (einfache Gesellschaft Test) und ich versuche zu JUnit spuckt .

Mein Problem ist, wenn ich die Anwendung ausführen, gibt sie mir in der Konsole: (Kopieren und von IntelliJ geklebt)

Id 1234 nao encontrado 
123, R$ 441,00 
321, R$ -8490,00 
255, R$ 884,00 

Druck:

enter image description here

Und mein Test ist:

assertEquals(outContent.toString().trim(),"Id 1234 nao encontrado\n" + 
       "123, R$ 441,00\n" + 
       "321, R$ -8490,00\n" + 
       "255, R$ 884,00"); 

Ich bekomme:

junit.framework.ComparisonFailure: <Click to see difference> 


    at junit.framework.Assert.assertEquals(Assert.java:100) 
    at junit.framework.Assert.assertEquals(Assert.java:107) 
    at junit.framework.TestCase.assertEquals(TestCase.java:269) 
    at com.company.AccountManagerTest.testPrintAccountsBalance(AccountManagerTest.java:85) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at junit.framework.TestCase.runTest(TestCase.java:176) 
    at junit.framework.TestCase.runBare(TestCase.java:141) 
    at junit.framework.TestResult$1.protect(TestResult.java:122) 
    at junit.framework.TestResult.runProtected(TestResult.java:142) 
    at junit.framework.TestResult.run(TestResult.java:125) 
    at junit.framework.TestCase.run(TestCase.java:129) 
    at junit.framework.TestSuite.runTest(TestSuite.java:252) 
    at junit.framework.TestSuite.run(TestSuite.java:247) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

enter image description here

Also, was ich hier falsch mache?

Testing mit JUnit4 und assertJ 2.4.0

Antwort

16

Die sichtbaren Zeichen identisch sind, aber die nicht druckbare Zeichen nicht.

Sie vergleichen die erwartete Ausgabe mit CRLF (\r\n) mit der tatsächlichen Ausgabe nur mit LF (\n). Das sehen Sie in IntelliJ über der rechten Seite beider Textbereiche.

Einfache Lösung ist das Ersetzen der \n in Ihrer Zeichenfolge mit \r\n. Oder entfernen Sie \r von der anderen.


Es ist auch erwähnenswert, dass der Parameter Bestellung (Object expected, Object actual) ist eigentlich, so sollten die outContent Sekunden gehen, da, dass die „tatsächlichen“ ausgegeben.

+0

Vielen Dank, das hat funktioniert! – Leonardo

+2

Wenn Sie nicht sicher sind, ob die Zeichenfolge "\ r" haben wird oder nicht, verwenden Sie outContent.toString(). Trim(). Replace ("\ r", "") 'als tatsächliche Zeichenfolge . Das heißt, entfernen Sie vor dem Vergleich alle '\ 'Zeichen. – ajb

+0

Irgendeine Möglichkeit, dies zu debuggen, außer indem man es von Hand betrachtet? –

Verwandte Themen