我有一种使用DotNet.invokeMethodAsync('YourApp', 'YourMethodAsync')
的方法。我使用以下代码进行呼叫:
RestTemplate
final ResponseEntity<RESTResponse> responseEntity = restTemplate.exchange(uri,
HttpMethod.POST,
httpEntityWithHeaders,
RESTResponse.class);
的类型为httpEntityWithHeads
。我正在编写测试并尝试模拟RestTemplate,以便在调用HttpEntity<String>
方法时将引发异常。
我正试图像这样嘲笑它:
exchange
但是运行测试时,它不会引发异常,而是继续。
有什么建议吗?
答案 0 :(得分:0)
正如您所说的httpEntityWithHeads
类型为HttpEntity<String>
,因此必须以与HttpEntity<String>
匹配的方式存根
when(restTemplate.exchange(
ArgumentMatchers.contains(randomHost),
ArgumentMatchers.eq(HttpMethod.POST),
ArgumentMatchers.<HttpEntity<String>>any(),
ArgumentMatchers.<ParameterizedTypeReference<List<RESTResponse>>>any())
).thenThrow(new ResourceAccessException("Random exception message."));
答案 1 :(得分:0)
在我看来,您的最后一个参数不是列表,而是一个类,这就是为什么存根失败的原因,我尝试了以下操作,并且可以正常工作。
@Test(expected = IllegalArgumentException.class)
public void test() {
RestTemplate restTemplate = mock(RestTemplate.class);
when(restTemplate.exchange(anyString(), ArgumentMatchers.eq(HttpMethod.POST),
any(HttpEntity.class),
any(Class.class))).thenThrow(new IllegalArgumentException("a"));
Rest rest = new Rest(restTemplate);
rest.call();
}
public void call(){
HttpEntity<Object> httpEntityWithHeaders= new HttpEntity<>(null);
final ResponseEntity<Object> responseEntity = restTemplate.exchange("a",
HttpMethod.POST,
httpEntityWithHeaders,
Object.class);
}