본문 바로가기

Java

(spring boot 3.1 이상) 간단한 설정(@ServiceConnection)으로 testcontainer 사용하기

SpringBoot 3.1 이후로 testcontainer 를 지원하기 시작하면서 자동 설정기능이 등장했다.

기존 버전에서는 testcontainer를 생성하면서 사용자 id, password 등의 값을 변경하는등 귀찮은 작업들이 필요했지만 @ServiceConnection 어노테이션의 등장으로 이런 것들이 필요 없어 졌다.

아래는 mysql 을 testcontainer 로 띄워서 테스트 하는 예제 이다.

 

@TestConfiguration(proxyBeanMethods = false)
public class TestContainerConfiguration {

	@Bean
	@ServiceConnection
	MySQLContainer<?> mysqlContainer() {
		return new MySQLContainer<>(DockerImageName.parse("mysql:latest")).withReuse(true);
	}

}

testcontainer를 정의하고 @ServiceConnection 어노테이션을 붙여주기만 하면 testcontainer 에서 mysql:latest 컨테이너를 띄우고 자동으로 이 컨테이너와 통신하도록 설정 된다.

이제 테스트 코드를 작성할때 아래처럼 설정클래스를 import 하기만 하면된다.

@SpringBootTest
@Import(TestContainerConfiguration.class)
class PopulationScrapLogRepositoryTest {

    @Autowired
    private PopulationScrapLogRepository populationScrapLogRepository;

    @Test
    @DisplayName("로그 데이터가 없으면 빈 값을 반환한다.")
    @Sql("/sql/population/repository/CREATE_population_scrap_log.sql") //테스트를 위한 초기화 SQL script
    void getLastLog_shouldReturn_empty_whenNoLog() {
        Optional<PopulationScrapLog> result = populationScrapLogRepository.getLastLog();

        assertTrue(result.isEmpty());
    }
}

 

 

RDB 관련 testcontainer를 사용할때 주의할 점으로, "spring.jpa.hibernate.ddl-auto" 설정을 validate 로 사용하는데 이렇게 하면 Application 이 구동되면서 에러가 발생한다. 따라서 testcontainer를 사용할 때는 none 값으로 설정을 해서 테스트 진행 해야 한다.

spring.jpa.hibernate.ddl-auto=none
반응형