参数String.class的匹配器,byte []。类Junit

时间:2015-10-14 01:17:34

标签: junit mockito

我有一个像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),???????);

用什么来代替????????

3 个答案:

答案 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