Я использую Mockito для последующего модульного тестирования службы. Я смущен, когда следует использовать doAnswer
vs thenReturn
.
Кто-нибудь может мне помочь? До сих пор я пробовал его с помощью thenReturn
.
Я использую Mockito для последующего модульного тестирования службы. Я смущен, когда следует использовать doAnswer
vs thenReturn
.
Кто-нибудь может мне помочь? До сих пор я пробовал его с помощью thenReturn
.
Вам следует использовать 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");
}