2017-03-01 13 views
1
mockito-core:2.7.10 

をスタブにしmockitoを使用して、私はボイド復帰を持つreleaseResourcesメソッドをスタブしていますmockitovoidメソッド

@Override 
public void detachView() { 
    mMovieListViewContract = null; 
    mMovieModelContract.releaseResources(); 
} 

を使用して、以下の方法をテストしています。そしてスタブされたバージョンが確実に一度だけ呼び出されるようにするためのテスト。

@Test 
public void shouldReleaseModelResourcesWhenDetached() { 
    doNothing().when(mockMovieListModelContract).releaseResources(); 

    movieListPresenterContract.detachView(); 

    verify(mockMovieListModelContract, times(1)).releaseResources(); 
} 

私はmockMovieListModelContract.releaseResources()のスタブバージョンが一度だけ呼び出されることを確認したい:

@Override 
public void releaseResources() { 
    if(mSubscription != null && !mSubscription.isUnsubscribed()) { 
     mSubscription.unsubscribe(); 
    } 
} 

私は次のテストを書かれています。 以下は、テストに失敗しました:

verify(mockMovieListModelContract, times(1)).releaseResources(); 

テストが失敗しました:だから私は、テストに合格したverifyZeroInteractions(mockMovieListModelContract);を使用するように変更し

Wanted but not invoked: 
movieListModelContract.releaseResources(); 
Actually, there were zero interactions with this mock. 

。ただし、スタブされたバージョンが1回だけ呼び出されることを確認するテスト。

+2

完全なテスト方法を表示できますか?モック、前とスパイの注釈の使用が私にとって最も興味深いものです –

+1

ここに示されているコードはよさそうです。初期化の問題でしょうか?すなわち、 'mockMovieListModelContract'は' movieListPresenterContract'インスタンスに挿入されません。 – Brice

+0

ありがとうございました。私はMovieListModelContractをMovieListPresenterImpのコンストラクタに挿入していなかったと思います。私はDagger2依存性注入を使用していて、これを追加するのを忘れていました。 – ant2009

答えて

2

ストレートフォワードの種類:モッキングフレームワークは、このメソッドがそのモックオブジェクトで呼び出されなかったことを伝えます。

そのための唯一のの説明があります。

  • あなたはない本当にあなたがあなたの質問に表示されている製品コードを実行している(あなたが何か他のものをテストしている)
  • 何かがと間違っているしていますあなたの設定。 ではありませんテストセットアップ時に擬似オブジェクトを「挿入」します
関連する問題