2016-06-21 40 views
0

試圖寫有一個的Mockito簡單的單元測試匹配例外:的Mockito anyBoolean()在返回

@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)); 
    } 

在運行時我得到org.mockito.exceptions.misusing.InvalidUseOfMatchersException:在此字符串:

.thenReturn(Mockito.anyBoolean()); 

我是新來的Mockito,不明白爲什麼這個框架不能返回任何布爾值?

+1

如果你不在乎什麼價值的嘲弄'loadBlockingStatus()'返回(這就是*不*什麼'anyBoolean()'是),有沒有點指定它 - 模擬會默認返回'false'(在你的情況下你需要確保你設置了'RETURNS_DEEP_STUBS'標誌)。 'mainViewPresenter'甚至是一個模擬?你應該多包含一些周圍的代碼並添加完整的堆棧跟蹤。看起來你正在嘲笑你想要測試的課程 - 這基本上破壞了測試的目的。 – kryger

+0

Tnx的答覆 - 我想我有這個測試算法的概念誤解。我真的不關心返回布爾值.... –

回答

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

在這裏,你應該返回要麼Boolean.TRUEBoolean.FALSE。如果你不關心這個布爾值,並從你的測試用例中刪除這行。

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