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



我正在尝试为我的一种方法编写一个测试类,我是JUnit的新手。我的类返回一个 void,并具有对外部终结点的RestTemplate.exchange调用。

开始尝试这个,但这给了我一个Null相反的MockException。

    @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 类。

如果这个问题已经得到回答,请指出我相应的URL。

任何帮助将不胜感激。

有点晚了,但如果其他人对此感到困惑:

如果您错误地使用模拟,也会发生此错误。它应该是:

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

请注意 restTemplate 后面的右括号,因此在 mockito 之上调用交换。

相关内容

  • 没有找到相关文章

最新更新