#java #unit-testing #junit #mockito
#java #модульное тестирование #junit #mockito
Вопрос:
Я хочу высмеять результат метода, который вызывается два раза с разными параметрами.
Я использовал этот код
Mockito.when(rt.exchange(Mockito.anyString(), Mockito.any(HttpMethod.class), Mockito.<HttpEntity<?>> any(), Mockito.<Class<String>> any())).thenReturn(response);
Mockito.when(rt.exchange(Mockito.anyString(), Mockito.any(HttpMethod.class), Mockito.<HttpEntity<?>>any(), Matchers.<Class<InfsEspecificasDTO>> any())).thenReturn(responseInfoEsp);
Однако, когда я запускаю тест, всегда выполняется первый макет.
Как устранить эту путаницу. Я попытался указать 4-й параметр во втором макете как InfsEspecificasDTO.class
но я получаю
Исключение InvalidUseOfMatchersException
Как я могу устранить путаницу?
Ответ №1:
Попробуйте doAnswer
решение. Первые три параметра не имеют значения, вы проверяете только экземпляр последнего:
when(rt.exchange(anyString(), any(HttpMethod.class), any(), any()))
.thenAnswer((invocation) -> {
Object paramToCheck = invocation.getArguments()[3];
if(paramToCheck instanceof String){
return response;
}else if (paramToCheck instanceof InfsEspecificasDTO){
return responseInfoEsp;
}
return null;
});