[java] TestContainers와 JUnit 5의 통합

테스트 환경을 구축하는 데 도움이 되는 도구로 TestContainers가 있습니다. 이는 컨테이너화된 환경에서 테스트를 수행할 수 있도록 지원해줍니다. 지금은 JUnit 5와 TestContainers를 함께 사용하는 방법을 알아보려고 합니다.

의존성 추가

먼저 프로젝트에 필요한 의존성을 추가해야 합니다. 아래는 Gradle을 사용하는 경우의 예시입니다.

testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
testImplementation 'org.testcontainers:testcontainers:1.15.3'
testImplementation 'org.testcontainers:junit-jupiter:1.15.3'

Maven을 사용하는 경우에는 다음과 같이 의존성을 추가할 수 있습니다.

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.15.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>1.15.3</version>
    <scope>test</scope>
</dependency>

컨테이너를 사용한 테스트 작성하기

TestContainers를 사용하여 컨테이너를 시작하고 테스트를 수행할 수 있습니다. 아래는 PostgreSQL 컨테이너를 사용한 예시입니다.

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

@Testcontainers
class MyTest {

    @Container
    private static final PostgreSQLContainer<?> postgresContainer = new PostgreSQLContainer<>();

    @Test
    void testSomething() {
        // 컨테이너에 대한 설정을 이용하여 테스트 수행
        String jdbcUrl = postgresContainer.getJdbcUrl();
        // ...
    }
}

위의 코드에서 @Testcontainers 어노테이션은 JUnit 5 테스트 클래스에 대한 TestContainers 지원을 활성화시킵니다. @Container 어노테이션은 컨테이너 인스턴스를 필드에 주입합니다. 이후에 해당 필드를 사용하여 컨테이너에 대한 설정을 가져올 수 있습니다.

테스트 수행하기

이제 TestContainers가 연동된 JUnit 테스트를 실행해보세요. IntelliJ IDEA 같은 IDE에서는 테스트 클래스나 테스트 메서드를 우클릭한 후 “Run”을 선택하여 실행할 수 있습니다. 또는 Gradle이나 Maven을 사용하여 ./gradlew test 또는 mvn test 명령을 실행할 수도 있습니다.

테스트가 실행되면 TestContainers는 컨테이너를 시작하고 테스트를 수행합니다. 이렇게 테스트를 실행하면 실제로 데이터베이스 컨테이너가 실행되고 테스트에서 사용할 수 있게 됩니다. 테스트가 완료된 후 컨테이너는 자동으로 종료됩니다.

결론

TestContainers는 테스트 환경을 구축할 때 매우 유용한 도구입니다. JUnit 5와 통합하여 사용하면 컨테이너화된 환경에서 테스트를 보다 쉽게 수행할 수 있습니다. 이 글을 통해 TestContainers를 JUnit 5와 함께 사용하는 방법을 알아보았습니다.