1
mockito-core:2.7.10
我使用的Mockito使用到的Mockito存根一個void方法
@Override
public void detachView() {
mMovieListViewContract = null;
mMovieModelContract.releaseResources();
}
測試下面的方法我磕碰其中有一個返回void的releaseResources方法。並進行測試,以確保只有一次調用stubbed版本。
@Override
public void releaseResources() {
if(mSubscription != null && !mSubscription.isUnsubscribed()) {
mSubscription.unsubscribe();
}
}
我寫了下面的測試:
@Test
public void shouldReleaseModelResourcesWhenDetached() {
doNothing().when(mockMovieListModelContract).releaseResources();
movieListPresenterContract.detachView();
verify(mockMovieListModelContract, times(1)).releaseResources();
}
我想驗證的mockMovieListModelContract.releaseResources()
廢止版本被調用一次。 下未能通過測試:
verify(mockMovieListModelContract, times(1)).releaseResources();
測試失敗:
Wanted but not invoked:
movieListModelContract.releaseResources();
Actually, there were zero interactions with this mock.
所以我改爲使用verifyZeroInteractions(mockMovieListModelContract);
它通過了測試。但是,用於驗證stubbed版本只被調用一次的測試。
你能展示完整的測試方法嗎?模擬和之前和間諜註釋用法是我最感興趣 –
這裏顯示的代碼看起來不錯。它可能是一個初始化問題?即'mockMovieListModelContract'沒有被注入到'movieListPresenterContract'實例中。 – Brice
感謝球員,你是正確的我沒有在MovieListPresenterImp的構造函數中注入MovieListModelContract。我正在使用Dagger2依賴注入並忘了添加這個。 – ant2009