2016-03-31 9 views
6

मैं इस परिदृश्य का सामना करना पड़ रहा हूँ:AssertEquals (स्ट्रिंग, स्ट्रिंग) ComparisonFailure जब सामग्री समान हैं

मैं है एक ऐप्लिकेशन है जो STDOUT के लिए बाहर सब कुछ (सरल कंपनी परीक्षण) थूक और मैं JUnit इस कोशिश कर रहा हूँ ।

मेरे समस्या यह है, जब मैं आवेदन चलाने के लिए, यह मेरे कंसोल में प्रस्तुत करती है: (कॉपी और इंटेलीजे से चिपकाया)

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

प्रिंट:

enter image description here

और अपने परीक्षण है:

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

मुझे मिल रहा है:

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

तो, क्या मैं गलत यहाँ कर रहा हूँ?

JUnit4 और assertJ 2.4.0

उत्तर

16

दिखने वाले अक्षर समान हैं, लेकिन प्रिंट न हो सकने पात्रों के साथ परीक्षण नहीं हैं।

आप केवल एलएफ (\n) के साथ वास्तविक आउटपुट में सीआरएलएफ (\r\n) अपेक्षित आउटपुट की तुलना कर रहे हैं। आप देख सकते हैं कि IntelliJ में दोनों टेक्स्ट क्षेत्रों के दाईं ओर से ऊपर।

सरल समाधान की आपकी स्ट्रिंग में \r\n के साथ प्रतिस्थापित करना है। या दूसरे से \r हटा दें।


यह भी ध्यान देने योग्य बात है कि पैरामीटर आदेश वास्तव में (Object expected, Object actual) है, इसलिए outContent दूसरी जाना चाहिए के बाद से है कि "वास्तविक" उत्पादन होता है लायक है।

+0

बहुत बहुत धन्यवाद, यह काम किया! – Leonardo

+2

यदि आप सुनिश्चित नहीं हैं कि स्ट्रिंग के पास \ r' होगा या नहीं, तो दूसरा समाधान 'outContent.toString()। Trim() का उपयोग करना है। ("\ R", "") "वास्तविक स्ट्रिंग के रूप में । यही है, तुलना करने से पहले सभी '\ r' अक्षर हटा दें। – ajb

+0

हाथ से इसे देखकर इसे डीबग करने का कोई तरीका? –

संबंधित मुद्दे