Как написать тест JUnit для метода обмена RestTemplate

Как написать тест 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;
}

Пожалуйста помоги

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);

}
Другие вопросы по тегам