【问题标题】:How to write JUnit test for RestTemplate exchange method [closed]如何为 RestTemplate 交换方法编写 JUnit 测试 [关闭]
【发布时间】:2020-11-23 10:38:47
【问题描述】:

如何为以下类编写 Mockito JUnit 测试? 这是我的代码:

/**
 * baseUrl
 */
@Value("${base.url}")
private String baseUrl;

/**
 * Client Method to get room by id
 * 
 * @param id
 * @return roomModel
 */
public RoomModel getRoomByIdClient(int id) {
    HttpHeaders headers = new HttpHeaders();
    HttpEntity<String> requestEntity = new HttpEntity<String>(headers);
    ResponseEntity<RoomModel> responseEntity = restTemplate.exchange(baseUrl+"/room/{id}",
            HttpMethod.GET, requestEntity, RoomModel.class, id);
    RoomModel roomModel = responseEntity.getBody();
    return roomModel;
}

请帮忙

【问题讨论】:

  • 请使用带有“spring boot resttemplate test”的搜索引擎。

标签: spring-boot junit mockito spring-resttemplate


【解决方案1】:

这是一个如何测试您提供的代码的简单示例。 这是junit 5。如果您使用的是junit 4,则需要进行调整。

@Mock
RestTemplate restTemplate;

@InjectMocks
YourClass testedClass;

@BeforeEach
void setUp() {
    MockitoAnnotations.initMocks(this);
    ReflectionTestUtils.setField(testedClass, "baseUrl", "https://baseURL.com");
}

@Test
void testRestTemplate() {

    RoomModel roomModel = new RoomModel();
    Mockito
        .when(restTemplate.exchange(
            ArgumentMatchers.eq("https://baseURL.com/room/{id}"),
            ArgumentMatchers.eq(HttpMethod.GET),
            ArgumentMatchers.any(HttpEntity.class),
            ArgumentMatchers.eq(RoomModel.class),
            ArgumentMatchers.eq(1)
        ))
      .thenReturn(new ResponseEntity<RoomModel>(roomModel, HttpStatus.OK));

    RoomModel returnedModel = testedClass.getRoomByIdClient(1);

    Assertions.assertEquals(roomModel, returnedModel);

}

【讨论】:

  • 感谢您的解决方案,它有帮助。但是我在这行 RoomModel returnedModel =testClass.getRoomByIdClient(1); 中得到了 NullPointerException
猜你喜欢
  • 2015-08-30
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2023-02-17
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多