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

标签 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);

但是,当我启动测试时,第一个模拟始终是执行的。 如何解决这个困惑。我尝试将第二个模拟中的第四个参数指定为 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;

  });

关于java - 如何解决使用Mockito.any()时的困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55394545/

相关文章:

java - Hibernate无法保存继承的对象

java - 如何在 "looking"明显表明测试通过的情况下编写单元测试?

java - junit 给出错误 java.lang.NoClassDefFoundError : junit/framework/JUnit4TestAdapterCache

java - 查找并打开 C :/中的任何 .exe 文件

使用 bean 类填充 Jtextfield 时出现 java.lang.NullPointerException

java - 将 .gif 或 .png 图像 WebResourceResponse 应答至 shouldInterceptRequest

python - 如何使用 pytest 测试无限 while 循环

unit-testing - 让 'go test -run <case>' 成功为 'go test' 的一般规则是什么?

java - Play Framework (2.1.3) 不运行任何测试

java - 如何为 Primefaces/JSF 应用编写单元测试