Java RestTemplate模拟抛出NullPointerException

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的行上不断抛出

我有一个rest模板,它在服务类中的方法中进行调用,如下所示:

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。

谢谢,这有助于解决问题。你一次只能做一级的嘲弄吗?