2016-03-31 20 views
6

Tôi đang phải đối mặt với các tình huống sau:assertEquals (String, String) ComparisonFailure khi nội dung giống hệt nhau

Tôi đã một ứng dụng mà spits tất cả mọi thứ ra cho STDOUT (kiểm tra công ty đơn giản) và tôi đang cố gắng để JUnit này .

Vấn đề của tôi là, khi tôi chạy ứng dụng, nó sẽ trả tôi trong Console: (sao chép và dán từ IntelliJ)

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

In:

enter image description here

Và thử nghiệm của tôi là:

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

Tôi nhận được:

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

Vì vậy, những gì tôi đang làm sai ở đây?

Testing với Junit4 và assertJ 2.4.0

Trả lời

16

Các nhân vật có thể nhìn thấy là giống hệt nhau, nhưng các ký tự không in thì không.

Bạn đang so sánh sản lượng dự kiến ​​có chứa CRLF (\r\n) với đầu ra thực tế chỉ với LF (\n). Bạn có thể thấy rằng trong IntelliJ phía trên bên phải của cả hai vùng văn bản.

Giải pháp đơn giản là thay thế \n trong chuỗi của bạn bằng \r\n. Hoặc xóa \r từ người khác.


Nó cũng đáng chú ý là các tham số đặt hàng thực sự là (Object expected, Object actual), vì vậy outContent nên đi thứ hai vì đó là "thực tế" đầu ra.

+0

Cảm ơn bạn rất nhiều, đã hoạt động! – Leonardo

+2

Nếu bạn không chắc chuỗi có có '\ r' hay không, giải pháp khác là sử dụng' outContent.toString(). Trim(). Replace ("\ r", "") 'làm chuỗi thực tế . Tức là, loại bỏ tất cả các ký tự '\ r' trước khi so sánh. – ajb

+0

Bất kỳ cách nào để gỡ lỗi này ngoại trừ bằng cách nhìn vào nó bằng tay? –

Các vấn đề liên quan