我正在使用Eclipse处理Java、Spring的RestTemplate和Mockito。我正在尝试模拟Spring的rest模板,而我正在模拟的方法的最后一个参数是Class类型。下面是函数的签名:
public <T> ResponseEntity<T> exchange(URI url,
HttpMethod method,
HttpEntity<?> requestEntity,
Class<T> responseType)
throws RestClientException
我最初尝试模仿这个方法如下:
//given restTemplate returns exception
when(restTemplate.exchange(isA(URI.class), eq(HttpMethod.POST), isA(HttpEntity.class), eq(Long.class))).thenThrow(new RestClientException(EXCEPTION_MESSAGE));
但是,这行代码会从eclipse中产生以下错误:
The method exchange(URI, HttpMethod, HttpEntity<?>, Class<T>) in the type RestTemplate is not applicable for the arguments (URI, HttpMethod, HttpEntity, Class<Long>)
然后Eclipse建议我用'Class'类型转换来转换最后一个参数,但是如果我将它转换为'Class'或其他类型,似乎就不起作用了。
我一直在网上寻找这方面的帮助,但似乎难倒的事实是,参数请求是一个类类型。
到目前为止,我所看到的答案主要与泛型集合有关。这里的任何帮助都将非常感谢。
2条答案
按热度按时间vsmadaxz1#
想通了。
正在调用的方法是参数化方法,但无法从匹配器参数推断参数类型(最后一个参数的类型为Class)。
进行显式调用
解决了我的问题。
olhwl3o22#
下面的代码片段对我很有效。对于请求实体,我使用any()代替isA()。