Mockito : doAnswer と thenReturn の質問

Mockito : doAnswer と thenReturn の質問

doAnswer私はサービス後のユニットテストに Mockito を使用しています。 vs をいつ使用すればよいのか混乱していますthenReturn

誰か詳しく教えてくれませんか? これまでのところ、 で試してみましたthenReturn

ベストアンサー1

メソッド呼び出しをモックしたときに戻り値がわかっている場合は、thenReturnまたは を使用する必要があります。モックされたメソッドを呼び出すと、この定義された値が返されます。doReturn

thenReturn(T value)メソッドが呼び出されたときに返される戻り値を設定します。

@Test
public void test_return() throws Exception {
    Dummy dummy = mock(Dummy.class);
    int returnValue = 5;

    // choose your preferred way
    when(dummy.stringLength("dummy")).thenReturn(returnValue);
    doReturn(returnValue).when(dummy).stringLength("dummy");
}

Answerモックされたメソッドが呼び出されたときに追加のアクションを実行する必要がある場合、たとえば、このメソッド呼び出しのパラメーターに基づいて戻り値を計算する必要がある場合に使用されます。

doAnswer()generic を使用して void メソッドをスタブする場合に使用しますAnswer

Answer は、モックと対話するときに実行されるアクションと返される戻り値を指定します。

@Test
public void test_answer() throws Exception {
    Dummy dummy = mock(Dummy.class);
    Answer<Integer> answer = new Answer<Integer>() {
        public Integer answer(InvocationOnMock invocation) throws Throwable {
            String string = invocation.getArgumentAt(0, String.class);
            return string.length() * 2;
        }
    };

    // choose your preferred way
    when(dummy.stringLength("dummy")).thenAnswer(answer);
    doAnswer(answer).when(dummy).stringLength("dummy");
}

おすすめ記事