소개
TestContainers는 자바 애플리케이션의 통합 테스트를 위한 도구로, 실제 컨테이너를 사용하여 응용 프로그램과 상호 작용할 수 있는 테스트 환경을 구축합니다. 이는 개발자가 로컬 환경에서 테스트할 때, 외부 종속성이나 다른 서비스와의 상호 작용을 쉽게 시뮬레이션하는 데 도움이 됩니다.
주요 기능
TestContainers는 다양한 컨테이너 형태로 제공되며, 예를 들어 Docker 컨테이너를 사용하여 Postgres, MySQL, MongoDB 등의 데이터베이스를 실행할 수 있습니다. 또한, 브라우저를 시뮬레이션하기 위해 Selenium 컨테이너도 제공하며, Apache Kafka, Redis, RabbitMQ 같은 다른 서비스와 상호 작용하기 위한 컨테이너도 사용할 수 있습니다.
TestContainers는 JUnit, TestNG, Spock 등과 함께 사용할 수 있으며, 테스트가 시작되기 전에 컨테이너를 자동으로 시작하고 테스트가 끝나면 정리합니다. 또한, 테스트 시나리오도 코드로 작성할 수 있어 테스트의 가독성을 향상시킵니다.
사용 예제
다음은 TestContainers를 사용하여 Postgres 데이터베이스와 상호 작용하는 간단한 테스트의 예제입니다.
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@Testcontainers
public class PostgresIntegrationTest {
@Container
private PostgreSQLContainer postgresContainer = new PostgreSQLContainer();
@Test
public void testConnection() {
// 데이터베이스 연결 테스트
String jdbcUrl = postgresContainer.getJdbcUrl();
assertNotNull(jdbcUrl);
// ...
}
}
위 예제에서는 PostgreSQLContainer
를 사용하여 데이터베이스 컨테이너를 시작합니다. @Container
어노테이션을 사용하여 컨테이너를 필드로 선언하고, @Test
메소드에서 컨테이너를 사용하여 테스트를 수행합니다. PostgreSQLContainer
를 사용한 테스트 종료 후, 자동으로 컨테이너가 정리됩니다.