Как устранить путаницу при использовании Mockito.any()?

#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;

  });