当前位置: 首页 > 知识库问答 >
问题:

Mockito单元测试用例调用模棱两可(需要使其不模棱两可)

徐飞尘
2023-03-14

我应该如何编写以下Mockito匹配器,以便调用不会有歧义?

我试图在代码中模拟的实际函数调用是:

//Variables
String url = http://theServer:8080/oath2-v1/token;
HttpEntity<String> request = new HttpEntity<String>("name=value",headers);

//Method call I am trying to mock using Mockito
response=cmsRestTemplate.exchange(url, HttpMethod.POST, request, DdsOAuthToken.class);
//From the Unit Test...
when(restTemplate.exchange(
    Matchers.anyString(),
    Matchers.any(HttpMethod.class),
    Matchers.any(HttpEntity.class),
    Matchers.<Class<DdsOAuthToken>>any(),
    Matchers.anyVararg()).thenReturn(response));
The method exchange(String, HttpMethod, HttpEntity<?>, Class<DdsOAuthToken>, Object[]) is ambiguous for the type RestTemplate
1. exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables)

2. exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Object... uriVariables)

共有1个答案

锺离阿苏
2023-03-14

必须向vararg参数添加强制转换(object[])。这可能与AnyVararg方法的声明有关。但我不确定。所以您的代码应该是:

//From the Unit Test...
when(restTemplate.exchange(
    Matchers.anyString(),
    Matchers.any(HttpMethod.class),
    Matchers.any(HttpEntity.class),
    Matchers.<Class<DdsOAuthToken>>any(),
    (Object[]) Matchers.anyVararg()).thenReturn(response));
 类似资料:
  • 无法找出正确的方法来使用匹配器来识别我要处理的exchange方法的重载。我正在打的电话:

  • 谁能解释为什么我在代码后面得到“对'end'的引用是模棱两可的”?我明白这是因为与STD::END发生冲突。但是如果我把结束放在主函数中,它不会显示错误。在全局范围内定义与在主函数范围内定义有何不同?

  • 但是,当我尝试相同的示例时,通过将Integer更改为Object,代码编译得很好,输出为String 谁能帮助我理解为什么当输出来自其中有字符串的方法时,签名中有对象的方法是必需的。以及类型错误不明确的原因是什么。

  • 我有一节简单的课 这将输出为10,没有任何错误!!!我原以为这会给我一个ClassCastException,其中有些错误,比如Integer不能转换为HashMap。 出于好奇和愤怒,我尝试了返回值,如下所示

  • 问题内容: 如果在调用时没有设置信号挂起,则线程将被挂起,直到一个或多个挂起。set定义的信号在调用sigwait()时应已被阻止;否则,行为是不确定的。sigwait()对set中的信号的信号动作的影响未指定。 这真的很模棱两可,和这里有什么区别? 而其对如何进行选择的结论并不能完全清楚: 总之,当需要运行代码以响应异步信号来通知线程时,应使用sigwait()处理该信号。或者,如果实现提供信号

  • 问题内容: Executors.newFixedThreadPool(3).submit(() -> {doSmth();}); “模棱两可的方法调用。在ExecutorService中提交(可调用)和在ExecutorService中提交(可运行)都匹配。” 如何解决?我知道我可以使用匿名类,但我想使用Function。 问题答案: Executors.newFixedThreadPool(3)