我有一个像mRestAccess.exchange(url, HttpMethod.GET, request, byte[].class);
的代码现在我想用JUnit来测试它。
当我写Mockito.doReturn(stringResponse).when(mRestAccess).exchange(Mockito.anyString(), Mockito.any(HttpMethod.class), Mockito.any(HttpEntity.class),???????);
用什么来代替????????
答案 0 :(得分:2)
您可以使用Mockito.eq
来测试参数相等性(使用equals
)。为了获得更大的灵活性,any(Class.class)
可以使用,但可能不会将类型参数T
限制为足以使用某些Mockito语法。
Mockito.doReturn(stringResponse)
.when(mRestAccess)
.exchange(
Mockito.anyString(),
Mockito.any(HttpMethod.class),
Mockito.any(HttpEntity.class),
Mockito.eq(byte[].class));
答案 1 :(得分:0)
我在Spring的RestClient交换方法中有一个类似的用例,它要求:
restClient.exchange(URI, HttpMethod, HttpEntity, String.class)
我用以下方法解决了它:
ArgumentCaptor<URI> uriCaptor = ArgumentCaptor.forClass(URI.class);
ArgumentCaptor<HttpEntity> entityCaptor = ArgumentCaptor.forClass(HttpEntity.class);
ArgumentCaptor<HttpMethod> methodCaptor = ArgumentCaptor.forClass(HttpMethod.class);
verify(restTemplate, times(1)).exchange(
uriCaptor.capture(),
methodCaptor.capture(),
entityCaptor.capture(),
Mockito.eq(String.class));
然后,除了拦截呼叫之外,您还有机会检查这些值。
您也可以这样做,例如:
doReturn(new ResponseEntity<String>("it works...", 200))
.when(restTemplate).exchange(
ArgumentMatchers.eq(uri),
ArgumentMatchers.eq(HttpMethod.GET),
ArgumentMatchers.eq(httpEntity),
Mockito.eq(String.class)
);
答案 2 :(得分:-2)
使用以下语句使用powermockito模拟spring restTemplate。
PowerMockito.when(restTemplate.exchange(
Matchers.anyString(),
Matchers.any(HttpMethod.class),
Matchers.<HttpEntity<?>> any(),
Matchers.any(Class.class)))
.thenReturn(respEntity);
有关详细说明,请参阅此link。