Java RestTemplate模拟抛出NullPointerException
我有一个rest模板,它在服务类中的方法中进行调用,如下所示:Java RestTemplate模拟抛出NullPointerException,java,spring,junit,mocking,mockito,Java,Spring,Junit,Mocking,Mockito,我有一个rest模板,它在服务类中的方法中进行调用,如下所示: public CustomerResponse someMethod() { CustomerResponse response = restTemplate.exchange(url, HttpMethod.GET, null, CustomerRes.class).getBody(); return response; } 在我的测试类中尝试模拟restTemplate时,它会在调用模拟restTemplate的行上不断抛出
public CustomerResponse someMethod() {
CustomerResponse response = restTemplate.exchange(url, HttpMethod.GET, null, CustomerRes.class).getBody();
return response;
}
在我的测试类中尝试模拟restTemplate时,它会在调用模拟restTemplate的行上不断抛出NullPointerException:
public void checkResponseIsNotNull() {
CustomerResponse customerResponseMock = mock(CustomerResponse.class);
when(restTemplate.exchange(url, HttpMethod.GET, null, CustomerResponse.class).getBody()).thenReturn(customerResponseMock);
CustomerResponse cr = service.someMethod();
Assert.assertNotNull(cr);
}
为什么要抛出空指针?我以前模拟过RestTemplate,只是没有getBody()方法,这会让be相信是它导致了空指针。您应该再添加一个模拟级别:
CustomerResponse customerResponseMock = mock(CustomerResponse.class);
ResponseEntity reMock = mock(ResponseEntity.class);
when(reMock.getBody()).thenReturn(customerResponseMock);
when(restTemplate.exchange(url, HttpMethod.GET, null, CustomerResponse.class)).thenReturn(reMock);
CustomerResponse cr = service.someMethod();
最初您只设置了
响应属性
,而restemplate
仍然保留默认值。。因此,当调用exchange
时返回null。谢谢,这有助于解决问题。你一次只能做一级的嘲弄吗?