프로젝트를 개발하다보면 종종 테스트에 필요한 외부 리소스나 서비스에 의존하는 경우가 있습니다. 이러한 의존성을 관리하고 테스트 환경을 쉽게 구성할 수 있는 도구로 TestContainers를 사용할 수 있습니다.
TestContainers란?
TestContainers는 테스트에 필요한 외부 리소스나 서비스를 다루기 위한 자바 라이브러리입니다. 이 라이브러리를 사용하면 테스트 코드에서 컨테이너를 쉽게 생성하고 관리할 수 있습니다.
컨테이너 간 의존성 관리하기
TestContainers를 사용하면 여러 개의 컨테이너를 동시에 실행하고 각 컨테이너 간의 의존성을 관리할 수 있습니다. 예를 들어, 데이터베이스와 웹서버를 사용하는 테스트를 작성할 때, 데이터베이스 컨테이너와 웹서버 컨테이너를 각각 생성하고 서로의 의존성을 설정할 수 있습니다.
아래는 TestContainers를 사용하여 데이터베이스와 웹서버 컨테이너를 생성하고 의존성을 설정하는 예시 코드입니다.
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;
public class MyTest {
private static final PostgreSQLContainer<?> postgresContainer = new PostgreSQLContainer<>(DockerImageName.parse("postgres:latest"))
.withDatabaseName("test")
.withUsername("test")
.withPassword("test")
.waitingFor(Wait.forLogMessage(".*database system is ready to accept connections.*\\n", 2));
private static final GenericContainer<?> webServerContainer = new GenericContainer<>(DockerImageName.parse("nginx:latest"))
.dependsOn(postgresContainer)
.withExposedPorts(80);
@BeforeAll
public static void setUp() {
postgresContainer.start();
webServerContainer.start();
}
@AfterAll
public static void tearDown() {
webServerContainer.stop();
postgresContainer.stop();
}
@Test
public void test() {
// 테스트 로직 작성
}
}
위 코드에서 PostgreSQLContainer
는 데이터베이스를 위한 컨테이너를 생성하고 GenericContainer
는 웹서버를 위한 컨테이너를 생성합니다. 데이터베이스 컨테이너는 웹서버 컨테이너에 의존하도록 설정됩니다.
@BeforeAll
어노테이션을 사용하여 테스트 실행 전에 컨테이너를 시작하고, @AfterAll
어노테이션을 사용하여 테스트 실행 후에 컨테이너를 정리합니다. 테스트 메소드에서는 컨테이너를 사용하여 필요한 테스트 로직을 작성할 수 있습니다.
결론
TestContainers는 테스트에 필요한 외부 리소스나 서비스에 쉽게 접근하고 의존성을 관리할 수 있는 강력한 도구입니다. 이를 통해 테스트 코드를 보다 신뢰성있고 효율적으로 작성할 수 있습니다.
더 자세한 내용은 TestContainers 공식 홈페이지를 참고하시기 바랍니다.