[java] TestContainers로 컴포넌트 테스트하기

TestContainers는 도커 컨테이너를 사용하여 테스트할 수 있는 자바 라이브러리입니다. 이 라이브러리를 사용하면 테스트 환경에서 실제 환경과 비슷한 컨테이너를 실행하여 테스트할 수 있습니다. 이를 통해 실제 데이터베이스나 메시지 브로커와 같은 의존성을 가진 컴포넌트를 테스트할 때 유용합니다.

TestContainers 설치하기

Maven이나 Gradle과 같은 빌드 도구를 사용하는 경우, 다음과 같이 의존성을 추가하여 TestContainers를 설치할 수 있습니다.

Maven:

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

Gradle:

testImplementation 'org.testcontainers:testcontainers:1.16.0'

TestContainers를 사용한 컴포넌트 테스트 예제

아래는 TestContainers를 사용하여 데이터베이스 컴포넌트를 테스트하는 예제입니다. 이 예제에서는 MySQL 컨테이너를 실행하고 데이터베이스 연결을 테스트합니다.

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

public class DatabaseComponentTest {

    @Test
    void testDatabaseComponent() {
        try (MySQLContainer<?> container = new MySQLContainer<>("mysql:8.0.26")) {
            container.start();

            // 컨테이너에 대한 설정 정보 가져오기
            String jdbcUrl = container.getJdbcUrl();
            String username = container.getUsername();
            String password = container.getPassword();

            // 테스트할 데이터베이스 컴포넌트에 설정 정보 적용
            DatabaseComponent component = new DatabaseComponent(jdbcUrl, username, password);

            // 테스트 실행
            component.connect();
            // ...

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

위의 예제에서는 MySQLContainer를 사용하여 MySQL 컨테이너를 실행하고 데이터베이스에 연결합니다. 컨테이너의 설정 정보를 가져와 실제 데이터베이스 컴포넌트에 적용한 후, 필요한 테스트를 실행합니다.

결론

TestContainers를 사용하면 실제 환경과 유사한 컨테이너를 사용하여 컴포넌트를 테스트할 수 있습니다. 이를 통해 의존성을 가진 컴포넌트를 더 신속하게 테스트하고 안정성을 확보할 수 있습니다. 추가적으로 다양한 컨테이너를 지원하는 TestContainers의 다른 기능들도 활용해 보세요.


참고 자료: