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



我想模拟一个用不同参数调用两次的方法的结果。

我使用了这个代码

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 始终是执行的那个。如何解决这种困惑。我尝试将第二个 Mock 中的第 4 个参数指定为 InfsEspecificasDTO.class但我得到

InvalidUseOfMatchersException

如何解决困惑?

尝试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;
  });

相关内容

  • 没有找到相关文章

最新更新