[java] TestContainers와 JUnit의 통합

소개

JUnit은 Java에서 단위 테스트를 작성하기 위한 일반적으로 사용되는 프레임워크입니다. 그러나 JUnit의 단위 테스트는 종종 외부 의존성이 필요한 경우에 어려움을 겪습니다. 예를 들어 데이터베이스와 상호 작용하는 테스트를 작성하려면 실제 데이터베이스 서버에 연결해야 합니다. 이러한 문제를 해결하기 위해 TestContainers를 사용할 수 있습니다.

TestContainers는 종속성 관리를 도와주는 자바 라이브러리로, 테스트 코드에서 사용하는 외부 시스템을 컨테이너화하여 테스트 환경을 구성할 수 있습니다. 이를 통해 외부 의존성을 가진 단위 테스트를 간편하게 작성할 수 있습니다.

이 문서에서는 TestContainers를 JUnit 프레임워크와 통합하여 테스트 환경을 구성하는 방법을 알아보겠습니다.

설정

먼저, Maven 또는 Gradle 등의 빌드 도구를 사용하여 TestContainers를 프로젝트에 추가해야 합니다. 아래는 Maven을 사용하는 경우의 예입니다:

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

또한, 테스트 클래스에 @RunWith 어노테이션을 추가하여 JUnit 테스트를 실행할 TestContainerRunner를 설정해야 합니다:

@RunWith(Testcontainers.class)
public class MyTestClass {
    // ...
}

컨테이너 생성

테스트 클래스 내에서 TestContainers를 사용하여 원하는 컨테이너를 생성할 수 있습니다. 아래는 PostgreSQL 컨테이너를 생성하는 예입니다:

@Container
private static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer();

위와 같이 @Container 어노테이션을 사용하여 컨테이너를 정의하면 JUnit은 각 테스트 메소드마다 컨테이너를 시작하고 종료합니다.

컨테이너 사용

컨테이너를 사용하여 데이터베이스와 상호 작용하는 테스트를 작성할 수 있습니다:

@Test
public void testDatabaseInteraction() {
    // 컨테이너의 JDBC URL 및 자격 증명 가져오기
    String jdbcUrl = postgreSQLContainer.getJdbcUrl();
    String username = postgreSQLContainer.getUsername();
    String password = postgreSQLContainer.getPassword();

    // 데이터베이스 연결 설정
    Connection connection = DriverManager.getConnection(jdbcUrl, username, password);

    // 테스트 코드 작성
    // ...

    // 연결 닫기
    connection.close();
}

위의 예제에서는 PostgreSQL 컨테이너의 JDBC URL과 자격 증명을 가져와 데이터베이스에 연결하고 테스트를 수행합니다.

결론

TestContainers는 외부 의존성을 가진 단위 테스트를 작성하는 것을 매우 간단하게 만들어줍니다. JUnit과 통합하여 사용하면 테스트 환경을 쉽게 구성할 수 있으며, 실제 시스템과 상호 작용하는 테스트를 효율적으로 작성할 수 있습니다.

더 자세한 내용은 TestContainers 공식 문서를 참조하십시오.