46.3.20 자동 구성된 REST 클라이언트

@RestClientTest 어노테이션을 사용하여 REST 클라이언트를 테스트 할 수 있습니다. 기본적으로 Jackson, GSON 및 Jsonb 지원을 자동 구성하고 RestTemplateBuilder를 구성하며 MockRestServiceServer에 대한 지원을 추가합니다. 일반 @Component 빈은 ApplicationContext로 로드되지 않습니다.

RestClientTest : 외부의 어떤 Rest API를 사용할 때 mock으로 대체할 수 있는 유용한 테스트 어노테이션.

RestTemplateBuilder 클래스 : 스프링부트 1.4 부터 추가된 클래스. 클래스패스에 라이브러리에 따라 자동으로 ClientHttpRequestFactory를 생성해주고 메시지 컨버터도 알맞게 추가해준다.

@RestClientTest 기능은 자신이 서버가 아니라 클라이언트 입장이 되는 코드를 테스트할때 유용합니다. 예를 들면, Apache HttpClient나 Spring의 RestTemplate을 사용하여 외부 서버에 웹 요청을 보내는 경우가 있습니다. @RestClientTest는 요청에 반응하는 가상의 Mock 서버를 만든다고 생각하면 됩니다. 내부 코드에서 웹 요청이 발생할 경우 @RestClientTest로 인해서 생성된 가상의 서버가 응답해줍니다. 물론 그 가상의 서버가 어떤 식으로 응답을 할지 정의할 수 있습니다. 이를 사용하면 보다 RestTemplate 같은 객체를 Mock 객체로 바꿔서 테스트하는 것보다 리얼 환경에 가깝게 단위 테스트를 수행할 수 있습니다. 이 기능을 사용하면 자동으로 MockRestServiceServer라는 빈이 생성되며 이를 이용하면 손쉽게 요청과 응답에 대해 설정을 할 수 있습니다.

[출처] https://meetup.toast.com/posts/124

테스트하려는 특정 Bean은 다음 예제와 같이 @RestClientTest의 value 또는 components 속성을 사용하여 지정해야합니다.

@RunWith(SpringRunner.class)
@RestClientTest(RemoteVehicleDetailsService.class)
public class ExampleRestClientTest {

	@Autowired
	private RemoteVehicleDetailsService service;

	@Autowired
	private MockRestServiceServer server;

	@Test
	public void getVehicleDetailsWhenResultIsSuccessShouldReturnDetails()
			throws Exception {
		this.server.expect(requestTo("/greet/details"))
				.andRespond(withSuccess("hello", MediaType.TEXT_PLAIN));
		String greeting = this.service.callRestService();
		assertThat(greeting).isEqualTo("hello");
	}

}

Last updated