我正在尝试为我的一种方法编写一个测试类,我是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 之上调用交换。