PHpullh

JAVA · 테스트

Testcontainers

Docker 컨테이너로 실제 인프라 통합 테스트를 수행합니다.

테스트고급TestcontainersDocker통합테스트PostgreSQL

핵심 설명

Docker 컨테이너로 실제 인프라 통합 테스트를 수행합니다.

Java code

// Testcontainers 의존성: org.testcontainers:testcontainers:1.19+

// import org.testcontainers.containers.PostgreSQLContainer;
// import org.testcontainers.junit.jupiter.*;

// @Testcontainers
// class DatabaseIntegrationTest {
//     @Container
//     static PostgreSQLContainer<?> postgres =
//         new PostgreSQLContainer<>("postgres:16-alpine")
//             .withDatabaseName("testdb")
//             .withUsername("test")
//             .withPassword("test");
//
//     @Test
//     void shouldConnectToDatabase() throws Exception {
//         String url = postgres.getJdbcUrl();
//         try (Connection conn = DriverManager.getConnection(
//                 url, "test", "test")) {
//             assertFalse(conn.isClosed());
//
//             Statement stmt = conn.createStatement();
//             stmt.execute("CREATE TABLE test (id INT, name VARCHAR(50))");
//             stmt.execute("INSERT INTO test VALUES (1, '홍길동')");
//
//             ResultSet rs = stmt.executeQuery("SELECT * FROM test");
//             assertTrue(rs.next());
//             assertEquals("홍길동", rs.getString("name"));
//         }
//     }
// }

class Main {
    public static void main(String[] args) {
        System.out.println("Testcontainers 지원 컨테이너:");
        System.out.println("- PostgreSQL, MySQL, MongoDB, Redis");
        System.out.println("- Kafka, RabbitMQ, Elasticsearch");
        System.out.println("- 모든 Docker 이미지 사용 가능");
    }
}

학습 팁

@Containerstatic을 함께 쓰면 테스트 클래스당 한 번만 컨테이너를 시작합니다. 테스트 시간을 크게 줄일 수 있습니다.

주의할 점

Testcontainers는 Docker가 실행 중이어야 합니다. CI/CD에서 Docker-in-Docker(DinD) 설정을 확인하세요.

자주 묻는 질문

Testcontainers란 무엇인가요?

Docker 컨테이너로 실제 인프라 통합 테스트를 수행합니다.

Testcontainers 학습 시 주의할 점은 무엇인가요?

Testcontainers는 Docker가 실행 중이어야 합니다. CI/CD에서 Docker-in-Docker(DinD) 설정을 확인하세요.