我如何模拟RestTemplate交换

时间:2018-05-10 10:47:37

标签: spring mockito

尝试如下的模拟:

Mockito.doReturn(responseEntity).when(restTemplate.exchange(anyString(), anyObject(), anyObject(), anyObject()));

这给了我一个汇编问题:

"方法exchange(String,HttpMethod,HttpEntity,Class,Object [])对于类型RestTemplate"

是不明确的

如此努力:

GetRelationshipInfoResponse relationship = getEntity();
        ResponseEntity<GetRelationshipInfoResponse> responseEntity = new ResponseEntity<GetRelationshipInfoResponse>(relationship,
                HttpStatus.ACCEPTED);
        Mockito.doReturn(responseEntity).when(restTemplate.exchange(anyString(), Matchers.eq(HttpMethod.POST),
                Matchers.<HttpEntity<?>> any(), Matchers.<Class<Object>> any()));

我现在在运行时看到MethodInterceptorFilter。拦截正在获取空对象值。

有人可以建议我如何解决。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我曾经遇到过这样的错误。我想出了一个更可靠的解决方案。我也提到了对我有用的导入声明。下面的代码完美地模拟了其余模板。

import org.mockito.Matchers; 
import static org.mockito.Matchers.any;  
import org.springframework.http.HttpHeaders;  
import org.springframework.http.ResponseEntity;

这是要模拟的实际模板。

    HttpHeaders headers = new Headers();
    headers.setExpires(10000L);     
    ResponseEntity<String> responseEntity = new ResponseEntity<>("dummyString", headers, HttpStatus.OK);
    when(restTemplate.exchange( Matchers.anyString(), 
            Matchers.any(HttpMethod.class),
            Matchers.<HttpEntity<?>> any(), 
            Matchers.<Class<String>> any())).thenReturn(responseEntity);

这里'responseEntity'值不会为空,我们可以使用它来完美地声明一条语句。