스프링에서는 이제 웹 클라이언트를 RestTemplate 대신 WebClient를 쓸 것을 이야기하고 있지만 아직 계속 쓰고 있다.
기능 테스트 코드를 작성하려고 한다.
결국은 클라이언트 코드는 RestTemplate을 주입받을 것인데, 테스트 코드에서 해당 요청을 Mocking을 할 수 있게 해주어야 한다.
스프링 프레임워크
스프링 프레임워크에서는 MockRestServiceServer 를 제공한다.
처음에 3.2.x 버전의 JavaDoc을 참고했다.
예제가 아래와 같이 되어있다.
RestTemplate restTemplate = new RestTemplate()
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
mockServer.expect(requestTo("/hotels/42"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("{ \"id\" : \"42\", \"name\" : \"Holiday Inn\"}", MediaType.APPLICATION_JSON));
Hotel hotel = restTemplate.getForObject("/hotels/{id}", Hotel.class, 42);
// Use the hotel instance...
mockServer.verify();
그런데 andExpect에 있는 부분에서 에러가 발생했다. (지금은 재현이 되지 않는다.)
현재 버전(current, 5.1.9)에서는 아래와 같이 예가 되어 있다. 뭐 빌더를 쓰는 것으로 바뀌었는데 큰 변화는 없다.
첫 expect에 manyTypes() 등이 추가 되었는데 별로 의미가 있지는 않다.
RestTemplate restTemplate = new RestTemplate()
MockRestServiceServer server = MockRestServiceServer.bindTo(restTemplate).build();
server.expect(manyTimes(), requestTo("/hotels/42"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("{ \"id\" : \"42\", \"name\" : \"Holiday Inn\"}", MediaType.APPLICATION_JSON));
Hotel hotel = restTemplate.getForObject("/hotels/{id}", Hotel.class, 42);
// Use the hotel instance...
// Verify all expectations met
server.verify();
스프링 부트
스프링부트에는 TestRestTemplate 라는 것을 제공한다.
그런데 이것은 웹클라이언트 테스트가 아니라 서버에 대한 테스트이다.
'Programing > Framework' 카테고리의 다른 글
[spring] stream 사용 예, 하지만 없어졌지... (0) | 2019.10.14 |
---|---|
[Spring] 스프링 프레임워크 개요 (0) | 2019.09.08 |
[Spring] RestClientException 예외 정리 (0) | 2019.07.24 |
[SpringBoot] ConversionService에 대한 오해 (0) | 2019.06.25 |
[스프링 부트] StringHttpMessageConverter 를 쓸 때 주의점 (0) | 2019.06.11 |