SpringBoot는 RESTful API 통합 테스트를 위해 TestRestTemplate을 사용합니다.

SpringBoot는 RESTful API 통합 테스트를 위해 TestRestTemplate을 사용합니다.

RESTful API 통합 테스트는 애플리케이션과 외부 종속성 간의 통합을 테스트합니다. SpringBoot는 RESTful API를 테스트하기 위해 TestRestTemplate을 제공하며, 이 기사에서는 RESTful API 통합 테스트를 위해 TestRestTemplate을 사용하는 방법을 소개합니다.

여기에 이미지 설명 삽입

1. TestRestTemplate이란?

TestRestTemplate은 RESTful API를 테스트하기 위해 SpringBoot에서 제공하는 도구 클래스입니다. TestRestTemplate은 테스트에서 HTTP 요청을 시뮬레이션하고 응답이 예상대로인지 확인할 수 있습니다. TestRestTemplate은 RestTemplate을 기반으로 구현되지만 테스트에 사용하기 위해 다른 구성과 인터셉터를 사용합니다.

2. TestRestTemplate 사용 방법

TestRestTemplate 사용은 매우 간단합니다. 테스트 클래스에서 TestRestTemplate 인스턴스를 만들고 이 인스턴스를 사용하여 HTTP 요청을 실행하기만 하면 됩니다. 예를 들어 다음은 TestRestTemplate을 사용하여 RESTful API를 테스트하는 예입니다.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerIntegrationTest {
    
    

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void shouldReturnUserById() {
    
    
        ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
        User user = responseEntity.getBody();
        assertThat(user.getId()).isEqualTo(1L);
        assertThat(user.getName()).isEqualTo("John Smith");
    }
}

테스트에서는 Spring Boot Test 및 JUnit 주석을 사용하여 테스트 환경을 구성합니다. @Autowired 주석은 TestRestTemplate 인스턴스를 자동으로 주입하는 데 사용됩니다. 테스트 메서드에서 TestRestTemplate을 사용하여 HTTP GET 요청을 수행하고 어설션을 사용하여 응답이 예상대로인지 확인합니다.

3. TestRestTemplate 고급 사용법

TestRestTemplate은 테스트에서 HTTP 요청을 시뮬레이션하고 응답을 검증하기 위한 많은 고급 사용법을 제공합니다. 다음은 몇 가지 일반적인 고급 사용법입니다.

3.1 HTTP 요청 시뮬레이션

TestRestTemplate은 GET, POST, PUT, DELETE 등과 같은 다양한 HTTP 요청을 시뮬레이션할 수 있습니다. 여기 몇 가지 예가 있어요.

// GET 请求
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);

// POST 请求
User user = new User("John Smith");
ResponseEntity<User> responseEntity = restTemplate.postForEntity("/users", user, User.class);

// PUT 请求
User user = new User("John Smith");
restTemplate.put("/users/{id}", user, 1);

// DELETE 请求
restTemplate.delete("/users/{id}", 1);

3.2 HTTP 응답 확인

TestRestTemplate은 상태 코드, 응답 헤더 및 응답 본문과 같은 HTTP 응답의 다양한 속성을 확인할 수 있습니다. 여기 몇 가지 예가 있어요.

// 验证状态码
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);

// 验证响应头
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
assertThat(responseEntity.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_JSON);

// 验证响应体
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
User user = responseEntity.getBody();
assertThat(user.getId()).isEqualTo(1L);
assertThat(user.getName()).isEqualTo("John Smith");

3.3 요청 헤더 추가

TestRestTemplate은 실제 HTTP 요청을 시뮬레이션하기 위해 HTTP 요청 헤더를 추가할 수 있습니다. 여기 몇 가지 예가 있어요.

HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer token");
HttpEntity<Object> entity = new HttpEntity<>(headers);
ResponseEntity<User> responseEntity = restTemplate.exchange("/users/{id}", HttpMethod.GET, entity, User.class, 1);
User user = responseEntity.getBody();
assertThat(user.getId()).isEqualTo(1L);
assertThat(user.getName()).isEqualTo("John Smith");

3.4 매개변수화된 URL 사용

TestRestTemplate은 매개변수화된 URL을 사용하여 테스트에서 URL을 동적으로 생성할 수 있습니다. 여기 몇 가지 예가 있어요.

// 使用占位符
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);

// 使用Map
Map<String, Long> params = new HashMap<>();
params.put("id", 1L);
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, params);

// 使用URI
URI uri = UriComponentsBuilder.fromUriString("/users/{id}").build(1);
ResponseEntity<User> responseEntity = restTemplate.getForEntity(uri, User.class);

3.5 인터셉터 사용

TestRestTemplate은 인터셉터를 사용하여 HTTP 요청과 응답 사이에 사용자 지정 논리를 추가할 수 있습니다. 여기 몇 가지 예가 있어요.

// 添加请求拦截器
restTemplate.getRestTemplate().setInterceptors(Collections.singletonList((request, body, execution) -> {
    
    
    request.getHeaders().set("Authorization", "Bearer token");
    return execution.execute(request, body);
}));

// 添加响应拦截器
restTemplate.getRestTemplate().setInterceptors(Collections.singletonList((request, body, execution) -> {
    
    
    ResponseEntity<User> responseEntity = execution.execute(request, body, User.class);
    User user = responseEntity.getBody();
    user.setName(user.getName().toUpperCase());
    return new ResponseEntity<>(user, responseEntity.getStatusCode());
}));

위의 예에서는 요청 및 응답 인터셉터가 사용됩니다. 요청 인터셉터는 Authorization 요청 헤더를 추가하고 응답 인터셉터는 응답 본문의 이름 필드를 대문자로 변환합니다.

4. 요약

TestRestTemplate은 RESTful API를 테스트하기 위해 SpringBoot에서 제공하는 도구 클래스입니다. TestRestTemplate을 사용하여 HTTP 요청을 시뮬레이트하고 응답이 예상과 같은지 확인합니다. TestRestTemplate은 다양한 HTTP 요청 모의, HTTP 응답 유효성 검사, 요청 헤더 추가, 매개변수화된 URL 사용 및 인터셉터 사용과 같은 많은 고급 사용을 제공합니다. TestRestTemplate을 사용하여 애플리케이션의 RESTful API를 효율적으로 테스트하여 외부 종속성과의 통합이 제대로 작동하는지 확인합니다.

Supongo que te gusta

Origin blog.csdn.net/2302_77835532/article/details/131371791
Recomendado
Clasificación