使用Mockito.any()时如何解决困惑?

时间:2019-03-28 09:49:09

标签: java unit-testing 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);

但是,当我启动测试时,第一个模拟总是被执行的。 如何解决这种混乱。我尝试将第二个Mock中的第4个参数指定为InfsEspecificasDTO.class,但得到

  

InvalidUseOfMatchersException

我该如何解决困惑?

1 个答案:

答案 0 :(得分: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;

  });