首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito返回空

Mockito返回空
EN

Stack Overflow用户
提问于 2020-12-16 17:07:04
回答 1查看 348关注 0票数 0

我有下面的A类实现,使用spring引导。A是对restTemplate进行GET/POST/PUT RestAPI调用的抽象。测试是用Mockito编写的。

代码语言:javascript
复制
Class A {

@Bean
RestTemplate restTemplate;

public class A(RestTemplate restTemplate){
    this.restTemplate = restTemplate;
}

public ResponseEntity perform(String endPoint, String requestBody, String auth, HttpMethod httpMethod){
    ...code to create parameters to pass to the exchange method
    ResponseEntity responseEntity = restTemplate.exchange(url, httpMethod, requestEntity, String.class)
    return responseEntity;
 }

}

用Mockito:单元测试:

代码语言:javascript
复制
class ATest{
    A a;

    @Spy
    RestTemplate restTemplate;

    @Before
    public void setUp() {
        a = Mockito.spy(new A(restTemplate));
    }
    
      @Test
    public void testHttpUtil(){
        ResponseEntity responseEntity = new ResponseEntity(HttpStatus.OK);
        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization" , "testAuth");
        HttpEntity<String> requestEntity = new HttpEntity<String>("testPayload", headers);
        Mockito.doReturn(responseEntity).when(restTemplate).exchange(Mockito.any(),Mockito.eq(HttpMethod.POST), Mockito.any(HttpEntity.class), Mockito.eq(String.class));
        ResponseEntity responseEntity1 = a.perform("https://example.com/v1/testapi", "testpayload", "testauthinfo", MediaType.APPLICATION_JSON_VALUE, HttpMethod.POST );
        Assert.assertNotNull(responseEntity1);
        Mockito.verify(restTemplate, Mockito.atMost(1)).exchange(Mockito.any(),Mockito.eq(HttpMethod.POST), Mockito.any(HttpEntity.class), Mockito.eq(String.class));

    }
}

这个实现背后的想法是,在调用A的执行方法时,模拟restTemplate的exchange方法,并返回一个响应。现在,在A的执行方法上返回null。看来我做错什么了。有人能帮我吗?

为了规避这个问题,我嘲笑了RestTemplate并使用了

Mockito.verify(restTemplate, Mockito.atMost(1)).exchange(Mockito.any(),Mockito.eq(HttpMethod.POST), Mockito.any(HttpEntity.class), Mockito.eq(String.class));来查找调用restTemplate.exchange方法的次数。测试已经通过了。但仍然想知道问题中发布的实现有什么问题

EN

回答 1

Stack Overflow用户

发布于 2020-12-17 04:56:36

更新:在实例化restTemplate时,测试通过了。对测试代码进行以下更改。

代码语言:javascript
复制
@Spy
RestTemplate restTemplate = new RestTemplate();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65327875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档