https://www.baeldung.com/spring-boot-testresttemplate/를 번역함.
1. 개요
이 기사에서는 Spring Boot TestRestTemplate을 탐색합니다 . 이것은 TestRestTemplate 에 초점을 맞추기 전에 읽어볼 것을 강력히 권장하는 RestTemplate 가이드 의 후속 조치로 취급될 수 있습니다 . TestRestTemplate 은 RestTemplate 의 매력적인 대안으로 간주될 수 있습니다 .
2. 메이븐 종속성
TestRestTemplate 을 사용하려면 다음과 같은 적절한 종속성이 필요합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
Maven Central 에서 최신 버전을 찾을 수 있습니다 .
3. TestRestTemplate 및 RestTemplate
이 두 클라이언트 모두 통합 테스트를 작성하는 데 매우 적합하며 HTTP API와의 통신을 매우 잘 처리할 수 있습니다.
예를 들어, 표준 메서드, 헤더 및 기타 HTTP 구성과 동일한 메서드를 제공합니다.
그리고 이러한 모든 작업은 RestTemplate 가이드에 잘 설명되어 있으므로 여기에서 다시 다루지 않겠습니다.
다음은 간단한 GET 요청 예입니다.
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
getForEntity(FOO_RESOURCE_URL + "/1", String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
두 클래스가 매우 유사하다는 사실에도 불구하고 TestRestTemplate 은 RestTemplate을 확장하지 않고 몇 가지 매우 흥미로운 새 기능을 제공합니다.
4. TestRestTemplate 의 새로운 기능은 무엇입니까 ?
4.1. 기본 인증 자격 증명이 있는 생성자
TestRestTemplate 은 기본 인증을 위해 지정된 자격 증명으로 템플릿을 만들 수 있는 생성자를 제공 합니다 .
이 인스턴스를 사용하여 수행된 모든 요청은 제공된 자격 증명을 사용하여 인증됩니다.
TestRestTemplate testRestTemplate
= new TestRestTemplate("user", "passwd");
ResponseEntity<String> response = testRestTemplate.
getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
4.2. HttpClientOption이 있는 생성자
또한 TestRestTemplate 을 사용하면 ENABLE_COOKIES, ENABLE_REDIRECTS 및 SSL 옵션과 함께 TestRestTemplate 의 열거 형인 HttpClientOption을 사용하여 기본 Apache HTTP 클라이언트를 사용자 지정할 수 있습니다 .
간단한 예를 살펴보겠습니다.
TestRestTemplate testRestTemplate = new TestRestTemplate("user",
"passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES);
ResponseEntity<String> response = testRestTemplate.
getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK))
위의 예에서는 기본 인증과 함께 옵션을 사용하고 있습니다.
인증이 필요하지 않은 경우에도 간단한 생성자로 템플릿을 만들 수 있습니다.
TestRestTemplate(TestRestTemplate.HttpClientOption.ENABLE_COOKIES)
4.3. 새로운 방법
생성자는 지정된 자격 증명으로 템플릿을 만들 수 있을 뿐만 아니라 템플릿이 생성된 후 자격 증명을 추가할 수도 있습니다. TestRestTemplate 은 이미 존재하는 템플릿에 자격 증명을 추가하는 withBasicAuth() 메서드를 제공합니다 .
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.withBasicAuth(
"user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION,
String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
5. TestRestTemplate 과 RestTemplate 모두 사용하기
TestRestTemplate 은 RestTemplate 의 래퍼로 작동할 수 있습니다 . 예를 들어 레거시 코드를 다루기 때문에 강제로 사용해야 하는 경우입니다. 이러한 간단한 래퍼를 만드는 방법은 아래에서 확인할 수 있습니다.
RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
restTemplateBuilder.configure(restTemplate);
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplateBuilder);
ResponseEntity<String> response = testRestTemplate.getForEntity(
FOO_RESOURCE_URL + "/1", String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
6. 결론
TestRestTemplate 은 RestTemplate 의 확장이 아니라 통합 테스트를 단순화하고 테스트 중 인증을 용이하게 하는 대안입니다. Apache HTTP 클라이언트의 사용자 정의에 도움이 되지만 RestTemplate 의 래퍼로도 사용할 수 있습니다 .
GitHub 에서 이 기사에 제공된 예제를 확인할 수 있습니다 .