테스트에서 도커 컨테이너를 실행할 수 있는 라이브러리
Testcontainers JUnit5 지원 모듈 설치
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>1.15.1</version>
<scope>test</scope>
</dependency>
@Testcontainers
@Container
각 모듈 별도 설치 필요
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.15.1</version>
<scope>test</scope>
</dependency>
applecation.propertiesd에 다음 추가
spring.datasource.url=jdbc:tc:postgresql:///studytest
spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver
//tc 키워드가 붙어있는 url 정보에 해당하는 driver로 test containers가 제공하는 driver 사용
static PostgreSQLContainer postgreSQLContainer= new PostgreSQLContainer()
.withDatabaseName("studytest");
이렇게 하면 test containers가 띄운 postgres에 연결이 됌
컨테이너 만들기
New GenericContainer(String imageName)
static GenericContainer postgreSQLContainer= new GenericContainer("postgres").withEnv("POSTGRES_DB","studytest");
네트워크
환경 변수 설정
명령어 실행
사용할 준비가 됐는지 확인
로그 살펴보기
@ContextConfiguration
ApplicationContextInitializer
TestPropertyValues
Environment
전체 흐름
테스트에서 서로 관련있는 컨테이너 사용시
Docker Compose: https://docs.docker.com/compose/
Testcontainer의 docker compose 모듈을 사용할 수 있음
도커 Compose 서비스 정보 참조
특정 서비스 Expose
@Container
static DockerComposeContainer composeContainer =
new DockerComposeContainer(new File("src/test/resources/docker-compose.yml"))
.withExposedService("study-db", 5432);
Compose 서비스 정보 참조
static class ContainerPropertyInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext context) {
TestPropertyValues.of("container.port=" + composeContainer.getServicePort("study-db", 5432))
.applyTo(context.getEnvironment());
}
}