Я использую Mockito для последующего модульного тестирования. Я смущен, когда следует использовать doAnswer
против thenReturn
.Mockito: doAnswer Vs thenReturn
Может ли кто-нибудь помочь мне в деталях? До сих пор я пробовал это с thenReturn
.
Я использую Mockito для последующего модульного тестирования. Я смущен, когда следует использовать doAnswer
против 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()
, когда вы хотите, чтобы окурок метод недействительным с родовым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");
}
Благодаря @schlauergerd. Теперь я понял. –
привет @Roland Weisleder, но иногда вам нужно возвращать внутренний код, генерируемый значением, и ничего общего с аргументами, например. 'code = UUID.randomUUID()', мне не удалось реализовать это с помощью 'mockito'. – zhuguowei
Когда ваш макет должен вернуть новый UUID для каждого вызова, вы должны реализовать 'Ответ' только с' return UUID.randomUUID(); '. –