Подтвердить что ты не робот

Mockito: doAnswer Vs thenReturn

Я использую Mockito для последующего модульного тестирования службы. Я смущен, когда следует использовать doAnswer vs thenReturn.

Кто-нибудь может мне помочь? До сих пор я пробовал его с помощью thenReturn.

4b9b3361

Ответ 1

Вам следует использовать thenReturn или doReturn, когда вы знаете возвращаемое значение во время вымывания вызова метода. Это определенное значение возвращается при вызове метода mocked.

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(), если вы хотите заглушить метод void с общим 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");
}