Как устранить путаницу при использовании Mockito.any ()? - PullRequest
0 голосов
/ 28 марта 2019

Я хочу смоделировать результат метода, который вызывается два раза с разными параметрами.

Я использовал этот код

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 Ответ

1 голос
/ 28 марта 2019

Попробуйте решение 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;

  });
...