2016-11-22 8 views
1

にコールバックして連続した呼び出しをスタブする方法次のようなメソッド呼び出しをスタブすることができますMockitoを使用する場合mockito

when(mock.someMethod("some arg")) 
    .thenThrow(new RuntimeException()) 
    .thenReturn("foo"); 

しかし、あなたの方法はvoidを返すときには、この形式でスタブする必要があります。

doAnswer(new Answer() {..).when(mock). someMethod("some arg"); 

は、私はあなたがCをスタブすることができますWorker.class

このような
class Worker { 

    void doWork(Callback callback) { 
     boolean success= ...; 
     if(success){ 
      callback.onSuccess(); 
     }else { 
      callback.onFail(); 
     } 
    } 

} 

を持っている想像してみてこのコードでオールズ:

doAnswer(new Answer() { 
     @Override 
     public Object answer(InvocationOnMock invocation) throws Throwable { 
      Callback callback= invocation.getArguments()[0]; 
      callback.onSuccess(); 
      return null; 
     } 
    }).when(mockWorker).doWork(any(Callback.class)); 

は今、私は労働者には3つの連続した呼び出しが、私はそれをどのように行うことができますonFail, onSuccess, onFailを呼び出すようにすることをスタブにしたいと想像しますか?それぞれのanswer(InvocationOnMock invocation)コール内のモックを再設定する必要がありますか?

答えて

2

Okeyが答えを見つけました。

doAnswer(new Answer() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
     Callback callback= invocation.getArguments()[0]; 
     callback.onFail(); 
     return null; 
    } 
}). 
doAnswer(new Answer() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
     Callback callback= invocation.getArguments()[0]; 
     callback.onSuccess(); 
     return null; 
    } 
}). 
doAnswer(new Answer() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
     Callback callback= invocation.getArguments()[0]; 
     callback.onFail(); 
     return null; 
    } 
}).when(mockWorker).doWork(any(Callback.class)); 
のようにdoAnswerへの呼び出しをチェーンするだけで済みます。