[java] TestContainers와 REST API 테스트 작성하기

목차

TestContainers 소개

TestContainers는 자바 환경에서 도커 컨테이너를 사용하여 테스트 환경을 구축할 수 있는 도구입니다. 테스트를 실행하는 동안 실제 환경과 최대한 비슷한 환경을 제공하므로 더 안정적이고 신뢰성 있는 테스트를 작성할 수 있습니다.

TestContainers는 다양한 데이터베이스, 메시지 브로커, 웹 서버 등의 도커 이미지를 제공하며, 이를 사용하여 테스트 시나리오를 구축할 수 있습니다. 이를 통해 통합 테스트, 시스템 테스트, 종단 간 테스트 등을 쉽게 작성할 수 있습니다.

REST API 테스트 작성 방법

1. 의존성 추가

우선 프로젝트의 의존성에 TestContainers 관련 모듈을 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 종속성을 추가합니다:

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.16.0</version>
    <scope>test</scope>
</dependency>

2. 도커 컨테이너 설정

테스트 클래스의 @BeforeAll 또는 @BeforeEach 메서드에서 TestContainers를 초기화하고 도커 컨테이너를 설정합니다. 예를 들어, PostgreSQL 데이터베이스를 사용하는 경우 다음과 같이 설정할 수 있습니다:

import org.junit.jupiter.api.BeforeAll;
import org.testcontainers.containers.PostgreSQLContainer;

public class MyIntegrationTest {

    public static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:latest");

    @BeforeAll
    public static void setUp() {
        postgres.start();
        System.setProperty("spring.datasource.url", postgres.getJdbcUrl());
        System.setProperty("spring.datasource.username", postgres.getUsername());
        System.setProperty("spring.datasource.password", postgres.getPassword());
    }

    // 테스트 메서드 작성
}

3. REST API 테스트 작성

테스트 메서드에서는 TestContainers에서 제공하는 도커 컨테이너를 사용하여 REST API를 테스트할 수 있습니다. 예를 들어, Spring Boot 애플리케이션의 /users 엔드포인트를 테스트하는 코드는 다음과 같습니다:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.ResponseEntity;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyIntegrationTest {

    private final TestRestTemplate restTemplate = new TestRestTemplate();

    @Test
    public void testGetUsers() {
        ResponseEntity<String> response = restTemplate.getForEntity("/users", String.class);
        // Assertions or validations
    }

    // 다른 테스트 메서드 작성
}

본 예시 코드에서는 TestRestTemplate를 사용하여 /users 엔드포인트에 GET 요청을 보내고 응답을 검증합니다. 이 외에도 다양한 방법으로 REST API를 테스트할 수 있으며, 필요에 따라 다른 테스트 코드를 작성할 수 있습니다.

결론

TestContainers를 사용하여 도커 컨테이너를 활용한 REST API 테스트를 작성하는 방법을 알아보았습니다. 이를 통해 좀 더 신뢰성 있고 안정적인 테스트를 작성할 수 있으며, 실제 환경과 유사한 테스트 환경을 구축할 수 있습니다. 자세한 내용은 TestContainers 공식 문서를 참조하시기 바랍니다.