[java] TestContainers를 사용하여 통합 테스트 작성하는 방법

TestContainers는 자바를 사용하여 통합 테스트를 작성할 때 유용한 도구입니다. TestContainers를 사용하면 테스트 환경을 독립적으로 관리하고 관리할 수 있으며, 테스트 코드에서 실제 데이터베이스, 컨테이너 또는 외부 서비스를 실행할 수 있습니다.

이번 포스트에서는 TestContainers를 사용하여 통합 테스트를 작성하는 방법을 알아보겠습니다.

1. 의존성 추가

먼저 프로젝트의 의존성에 TestContainers를 추가해야합니다. Maven 기준으로는 pom.xml 파일에 아래 의존성을 추가합니다.

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

Gradle을 사용하는 경우에는 build.gradle 파일에 아래 의존성을 추가합니다.

testImplementation 'org.testcontainers:testcontainers:1.15.1'

2. 테스트 작성하기

이제 TestContainers를 사용하여 통합 테스트를 작성할 준비가 되었습니다. 예를 들어 데이터베이스와 관련된 테스트를 작성해보겠습니다.

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

public class DatabaseIntegrationTest {
    
    // 테스트에서 사용할 PostgreSQL 컨테이너 생성
    static PostgreSQLContainer container = new PostgreSQLContainer()
            .withDatabaseName("test")
            .withUsername("test")
            .withPassword("test");

    @Test
    public void testDatabaseConnection() {
        // 컨테이너 시작
        container.start();

        // 컨테이너로부터 JDBC URL, username, password 가져오기
        String jdbcUrl = container.getJdbcUrl();
        String username = container.getUsername();
        String password = container.getPassword();

        // JDBC 연결 및 테스트 코드 작성
        // ...

        // 컨테이너 종료
        container.stop();
    }
}

위의 예제 코드에서는 PostgreSQLContainer를 사용하여 테스트에 필요한 PostgreSQL 컨테이너를 시작하고 종료합니다. 컨테이너에서 JDBC URL, username 및 password를 가져와서 실제 테스트 코드에서 사용할 수 있습니다.

3. 테스트 실행하기

테스트를 실행하기 전에 Docker가 설치되어 있어야 합니다. Docker가 설치되어있지 않다면 Docker 공식 사이트에서 설치할 수 있습니다.

이제 테스트를 실행해보겠습니다. IDE에서 테스트를 실행하거나, 터미널에서 프로젝트 루트 디렉토리에서 아래 명령어를 실행하여 테스트를 실행할 수 있습니다.

mvn test

또는,

gradle test

TestContainers는 테스트 실행 시에 Docker를 사용하여 필요한 컨테이너를 자동으로 시작하고 테스트가 완료되면 컨테이너를 종료합니다.

4. 추가적인 기능 활용하기

TestContainers는 다양한 데이터베이스, 컨테이너 및 외부 서비스를 지원합니다. 원하는 데이터베이스나 서비스에 따라 유용한 기능을 추가적으로 활용할 수 있습니다. TestContainers 공식 문서에서 원하는 기능을 찾아보세요.

결론

TestContainers는 테스트 환경을 독립적으로 관리하고 외부 서비스를 통합 테스트에 활용하는데 유용한 도구입니다. 이번 포스트에서는 TestContainers를 사용하여 통합 테스트를 작성하는 방법을 알아보았습니다. TestContainers를 사용하면 테스트 코드를 더욱 견고하고 신뢰할 수 있는 방법으로 작성할 수 있습니다.

TestContainers 공식 문서: https://www.testcontainers.org/

Happy testing!