2017-05-08 2 views
2

Mein Test wird bestanden, wenn ich die verifyNoMoreInteractions(daoInteractor) Zeile ausschließe. Ich dachte, die verifyNoMoreInteractions() am Ende des Tests zu platzieren, wie ich getan habe, würde bedeuten, dass dieser Fehler nicht passieren würde?Mockito verifyNoMoreInteractions() fehlgeschlagener Test, der bei Verwendung von assertEquals() anders ist

Alternativ wird es passieren, wenn ich die assertEquals() Linie ausschließen und verifyNoMoreInteractions() halten.

Bin ich übertests?

when(daoInteractor.getViewedReleases()).thenReturn(viewedReleases); 

verify(daoInteractor, times(1)).getViewedReleases(); 
line 210: assertEquals(daoInteractor.getViewedReleases(), viewedReleases); 

// line 216: verifyNoMoreInteractions(daoInteractor); 

Stacktrace:

org.mockito.exceptions.verification.NoInteractionsWanted: 
No interactions wanted here: 
-> at bj.main.MainPresenterUnitTest.buildRecommendationsError_ControllerError(MainPresenterUnitTest.java:216) 
But found this interaction on mock 'daoInteractor': 
-> at bj.main.MainPresenterUnitTest.buildRecommendationsError_ControllerError(MainPresenterUnitTest.java:210) 
*** 
For your reference, here is the list of all invocations ([?] - means unverified). 
1. -> at bj.main.MainPresenter.buildRecommendations(MainPresenter.java:160) 
2. [?]-> at bj.main.MainPresenterUnitTest.buildRecommendationsError_ControllerError(MainPresenterUnitTest.java:210) 


    at bj.main.MainPresenterUnitTest.buildRecommendationsError_ControllerError(MainPresenterUnitTest.java:216) 
    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:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    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.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:68) 
    at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:74) 
    at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39) 
    at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:161) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) 
    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:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 


Process finished with exit code -1 

Antwort

2

Das Problem ist nicht mit verifyNoMoreInteractions(daoInteractor);

An dieser Linie, die Sie Methodenaufruf erwartet werden:

verify(daoInteractor, times(1)).getViewedReleases(); 

jedoch der Anruf nicht tat geschehen noch. Sie sagen nicht spöttisch, dass Sie erwarten, dass der Anruf in der Zukunft stattfindet, Sie bestätigen, dass der Anruf bereits stattgefunden hat.

Die Lösung ist, die Linie nach dem Aufruf zu bewegen:

assertEquals(daoInteractor.getViewedReleases(), viewedReleases); 
verify(daoInteractor, times(1)).getViewedReleases(); 
verifyNoMoreInteractions(daoInteractor); 
Verwandte Themen