如何使用Mockito模拟restTemplate.postForEntity

dzhpxtsq  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(236)

我有这个在我的服务:

  1. private String postMethod(List<Integer> list) {
  2. String url = ...
  3. ResponseEntity<String> result = restTemplate.postForEntity(url, list, String.class);
  4. return result.getBody();
  5. }

在我的测试课上,我试着这样嘲笑它:

  1. @Mock
  2. RestTemplate restTemplate;
  3. @Test
  4. public void methodTest() {
  5. List<Integer> list = new ArrayList<>(Arrays.asList(22234,9842234));
  6. when(restTemplate.postForEntity(anyString(), any(), eq(String.class))).thenReturn(new ResponseEntity<String>("5be9b7f2b7c", HttpStatus.OK));
  7. String result = enrollmentServiceClient.retry(list);
  8. assertEquals("5be9b7f2b7c", result);
  9. }

当我运行我的测试时,我得到了一个空指针异常。有人知道为什么它不返回ResponseEntity吗?
看来这才是我应该嘲讽的方法:
公共响应实体postForEntity(URI url,@可空对象请求,类响应类型)

bhmjp9jg

bhmjp9jg1#

1.必须使用@RunWith(MockitoJUnitRunner.class)对测试进行注解。此注解自动初始化使用@Mock注解的模拟。如果使用的是JUnit 5,则必须改用@ExtendWith({MockitoExtension.class})。

  1. RestTemplate mock需要注入到被测服务中,需要为EnrollmentServiceClient服务创建一个带RestTemplate参数的构造函数,RestTemplate mock可以通过@InjectMocks注解注入到服务中
    工作试验示例:
  1. @RunWith(MockitoJUnitRunner.class)
  2. public class TestClass {
  3. @Mock
  4. RestTemplate restTemplate;
  5. @InjectMocks
  6. EnrollmentServiceClient enrollmentServiceClient;
  7. @Test
  8. public void methodTest() {
  9. List<Integer> list = new ArrayList<>(Arrays.asList(22234,9842234));
  10. when(restTemplate.postForEntity(anyString(), any(), eq(String.class))).thenReturn(new ResponseEntity<String>("RESULT", HttpStatus.OK));
  11. String result = enrollmentServiceClient.retry(list);
  12. assertEquals("RESULT", result);
  13. }
  14. }
  15. public class EnrollmentServiceClient {
  16. RestTemplate restTemplate;
  17. public EnrollmentServiceClient(RestTemplate restTemplate) {
  18. this.restTemplate = restTemplate;
  19. }
  20. private String postMethod(List<Integer> list) {
  21. String url = "...";
  22. ResponseEntity<String> result = restTemplate.postForEntity(url, list, String.class);
  23. return result.getBody();
  24. }
  25. public String retry(List<Integer> list) {
  26. return postMethod(list);
  27. }
  28. }
展开查看全部

相关问题