我有这个在我的服务:
private String postMethod(List<Integer> list) {
String url = ...
ResponseEntity<String> result = restTemplate.postForEntity(url, list, String.class);
return result.getBody();
}
在我的测试课上,我试着这样嘲笑它:
@Mock
RestTemplate restTemplate;
@Test
public void methodTest() {
List<Integer> list = new ArrayList<>(Arrays.asList(22234,9842234));
when(restTemplate.postForEntity(anyString(), any(), eq(String.class))).thenReturn(new ResponseEntity<String>("5be9b7f2b7c", HttpStatus.OK));
String result = enrollmentServiceClient.retry(list);
assertEquals("5be9b7f2b7c", result);
}
当我运行我的测试时,我得到了一个空指针异常。有人知道为什么它不返回ResponseEntity吗?
看来这才是我应该嘲讽的方法:
公共响应实体postForEntity(URI url,@可空对象请求,类响应类型)
1条答案
按热度按时间bhmjp9jg1#
1.必须使用@RunWith(MockitoJUnitRunner.class)对测试进行注解。此注解自动初始化使用
@Mock
注解的模拟。如果使用的是JUnit 5,则必须改用@ExtendWith({MockitoExtension.class})。RestTemplate
mock需要注入到被测服务中,需要为EnrollmentServiceClient
服务创建一个带RestTemplate
参数的构造函数,RestTemplate
mock可以通过@InjectMocks注解注入到服务中工作试验示例: