JUnit测试包含RestTemplate交换调用的void方法

时间:2019-06-05 10:32:17

标签: java spring-boot junit mockito resttemplate

我正在尝试为我的一种方法编写Test类,并且对JUnit还是陌生的。我的课程返回一个void,并有一个RestTemplate.exchange调用到外部端点。

我开始尝试这种方法,但这给了我NullInsteadOfMockException。

@Test
public void service1test() throws IOException{

    ResponseEntity<?> responseEntity = new ResponseEntity<>(HttpStatus.ACCEPTED);

    RestTemplate restTemplate = Mockito.mock(RestTemplate.class);

    Mockito.verify(restTemplate.exchange(Mockito.anyString(), Mockito.<HttpMethod> any(), Mockito.<HttpEntity<?>> any(), Mockito.<Class<?>> any(), Mockito.<String, String> anyMap()));




}

这是我要为其编写单元测试的方法。

@Autowired
private RestTemplate restTemplate;    

public void service1(String a, String b) {

RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
this.restTemplate = restTemplateBuilder.build();

HttpHeaders headers = new HttpHeaders();

try {

        headers.set("ID", ID);
        headers.set("secret", secret);

        System.out.println(docStoreUrl + itemID);
        HttpEntity requestEntity = new HttpEntity<>(null, headers);

        ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, Object.class);

        log.info("Status code for get : {}", response.getStatusCodeValue());

        if(response.getStatusCodeValue() == 200) {

            Object document = (Object) response.getBody();
            Class2.service2.execute(document);

        }
        else {
            log.info("Failed to retrieve document due to {}", response.getStatusCodeValue());
        }

}

我是JUnit测试的新手,无法弄清楚如何为汇聚所有行而编写Test类。

如果这个问题已经回答,请指向适当的网址。

任何帮助都会得到很大的帮助。

1 个答案:

答案 0 :(得分:0)

有点晚了,但是如果有人摔倒了:

如果您使用嘲笑错误,也会发生此错误。 应该是:

Mockito.verify(restTemplate).exchange(Mockito.anyString() ... 

在restTemplate之后立即注意右括号,因此在mockito的顶部调用了交换。