2017-03-01 61 views
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版本只被調用一次的測試。

+2

你能展示完整的測試方法嗎?模擬和之前和間諜註釋用法是我最感興趣 –

+1

這裏顯示的代碼看起來不錯。它可能是一個初始化問題?即'mockMovieListModelContract'沒有被注入到'movieListPresenterContract'實例中。 – Brice

+0

感謝球員,你是正確的我沒有在MovieListPresenterImp的構造函數中注入MovieListModelContract。我正在使用Dagger2依賴注入並忘了添加這個。 – ant2009

回答

2

直線前進的樣子:嘲諷框架告訴你這個方法沒有在該模擬對象上被調用。

只有爲兩個解釋:

  • 您是真的不多,你表現出對您的問題產品代碼(你正在測試其它東西)
  • 東西是錯誤的你的設置;而你是而不是在進行測試設置時「插入」模擬對象
相關問題