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

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

{% hint style="info" %}
RestClientTest : 외부의 어떤 Rest API를 사용할 때 mock으로 대체할 수 있는 유용한 테스트 어노테이션.
{% endhint %}

![](https://3140643518-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWdhssr0w9IqAHmA-ke%2F-LkCyvjlpvClK-ku8TMG%2F-LkD-9iycLuiHJZjE08D%2Fimage.png?alt=media\&token=847807b9-1707-42e7-ad1d-bcad78da0618)

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

![](https://3140643518-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWdhssr0w9IqAHmA-ke%2F-LkCyvjlpvClK-ku8TMG%2F-LkD-PSKw9YV1SjYVWd3%2Fimage.png?alt=media\&token=a8b56473-097a-4a0b-a947-a7b753ec30a4)

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

\[출처] <https://meetup.toast.com/posts/124>
{% endhint %}

| ![\[Tip\]](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/images/tip.png) |
| ----------------------------------------------------------------------------------------------- |
| @RestClientTest에 의해 활성화되는 자동 구성 설정 목록은 부록에서 찾을 수 있습니다.                                          |

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

```java
@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");
	}

}
```

####
