2013-07-14 25 views
0

JUnit說這個測試失敗了。但是,當我按下查看差異鏈接時,它顯示內容是相同的。那麼爲什麼如果這兩個對象是相同的測試失敗?JUnit說測試失敗。看差別說內容是一樣的

我正在運行的測試。

Assert.assertSame(card,vCardService.DecodeVCard(text)); 

這是當我按下 「看差」 的鏈接

enter image description here

錯誤顯示。

Expected :Card [CardId=1, UserId=0, FirstName=Joel, LastName=Dean,  WorkNumber=18769023684, CellNumber=18765757810, [email protected], Title=Mr., UserProfileImageUrl=null, CompanyName=Xormis, CompanyAddress=null, CompanyLatitude=0.0, CompanyLongitude=0.0, LogoUrl=null, QrCodeUrl=null, QrVCardUrl=null, VCardUrl=null, FacebookUrl=null, Website=null, ShareCount=0] 
Actual :Card [CardId=1, UserId=0, FirstName=Joel, LastName=Dean, WorkNumber=18769023684, CellNumber=18765757810, [email protected], Title=Mr., UserProfileImageUrl=null, CompanyName=Xormis, CompanyAddress=null, CompanyLatitude=0.0, CompanyLongitude=0.0, LogoUrl=null, QrCodeUrl=null, QrVCardUrl=null, VCardUrl=null, FacebookUrl=null, Website=null, ShareCount=0] 
<Click to see difference> 
    at org.junit.Assert.fail(Assert.java:88) 
    at org.junit.Assert.failNotSame(Assert.java:737) 
    at org.junit.Assert.assertSame(Assert.java:680) 
    at org.junit.Assert.assertSame(Assert.java:691) 
    at com.grikly.app.test.VCardServiceTest.testDecodeVCard(VCardServiceTest.java:68) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:76) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

回答

4

你想要assertEquals;如果它們是同一個對象,則斷言同名。

+0

我改變了這一點。它仍然不起作用。 –

+0

恩,你有沒有超過equals.Bit無知,如果這不是答案 –

+0

問題是,我是比較兩個對象。儘管它們包含相同的信息,但它們本質上是不同的,所以我認爲這就是導致問題的原因。 –

0

我有同樣的問題,但比較2個字符串對象(!!!)。 原來如果你使用的是IntelliJ不是那麼聰明的,如果你使用

assertThat(X,is(Y));

它不會顯示'\ n'和'\ n'之間的區別 - 即使它存在。 我可以使用assertEquals()來代替推薦,那麼在問題出現的地方會很痛苦。

0

即使兩個字符串按行結尾的樣式不同,IntelliJ也會告訴你「內容完全相同」。例如,如果實際字符串具有Unix風格的結尾,並且期望的字符串具有Windows風格的結尾,則IntelliJ將顯示「內容完全相同」,但斷言將失敗。