2016-06-21 14 views
0

Des Versuch, einen einfachen Unit-Test mit Mockito zu schreiben:Mockito anyBoolean() Matcher Ausnahme bei der Rückkehr

@Test 
    public void toggleBlockingControlTest_turnOff() { 
     when(mainViewPresenter.getAppSettingsStorage().loadBlockingStatus()) 
       .thenReturn(Mockito.anyBoolean()); 

     AppSettingsStorage appSettingsStorage = mainViewPresenter.getAppSettingsStorage(); 
     boolean statusBefore = appSettingsStorage.loadBlockingStatus(); 

     Mockito.verify(appSettingsStorage).saveBlockingStatus(Mockito.eq(!statusBefore)); 
    } 

In Runtime i org.mockito.exceptions.misusing.InvalidUseOfMatchersException bekam: bei dieser Zeichenfolge:

.thenReturn(Mockito.anyBoolean()); 

Ich bin neu in Mockito und kann nicht verstehen, warum dieses Framework keine boolean ???

+1

Wenn Sie kümmern sich nicht, welchen Wert der verspottete 'loadBlockingStatus()' gibt (und das ist * nicht *, was 'anyBoolean()' ist für), gibt es keinen Punkt, es spezifiziert - das Mock würde standardmäßig "false" zurückgeben (in Ihrem Fall müssten Sie sicherstellen, dass Sie das Flag "RETURNS_DEEP_STUBS" setzen). Ist 'mainViewPresenter' sogar ein Mock? Sie sollten etwas mehr Umgebungscode einbeziehen und den vollständigen Stack-Trace hinzufügen. Es sieht so aus, als ob Sie sich über die Klasse lustig machen, die Sie testen möchten - was den Zweck des Tests im Wesentlichen zunichte macht. – kryger

+0

Tnx für die Antwort - ich denke, ich habe ein konzeptionelles Missverständnis dieser Testalgo. Ich interessiere mich wirklich nicht dafür, Boolean zurückzugeben .... –

Antwort

0
when(mainViewPresenter.getAppSettingsStorage().loadBlockingStatus()) 
       .thenReturn(Mockito.anyBoolean()); 

Hier sollten Sie entweder Boolean.TRUE oder Boolean.FALSE zurückzukehren. Und wenn Sie diesen booleschen Wert nicht interessieren und entfernen Sie diese Zeile aus Ihrem Testfall.

ersetzen: Mockito.anyBoolean() --> Boolean.TRUE /Boolean.FALSE