-
spring boot 3.1 - testcontainersSpring/Test 2023. 12. 3. 16:22
blog : https://spring.io/blog/2023/06/23/improved-testcontainers-support-in-spring-boot-3-1
Spring boot 3.1 의 testcontainers support
spring boot 3.1 부터 spring-boot-testcontainers 가 지원됩니다
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-testcontainers
org.springframework.boot:spring-boot-testcontainers:3.2.0
기존에는
1) testContainer 를 생성할 때도, username 과 password 등의 정보를 입력해야 했고,
또는 (testContainer가 아닌) docker 로 container 를 올릴 때 역시 USER 와 PASSWORD 를 입력해야 했습니다.
그리고,
2) 위에서 띄운 postgresql container 와 spring app 을 연결하기 위해, application.yaml 파일에 연결정보를 입력해야 했습니다.
@Testcontainer @Container @ServiceConnection annotations
이제는, Spring boot 3.1 + testcontainer 를 사용하면, 아래처럼 몇개의 annotation 만 추가하면, 알아서 default 속성을 auto configuration 해서 testContainer 를 띄우고, jdbc connection 을 맺어 줍니다.
@Testcontainers
@Container
@ServiceConnection
PostgreSqlContainer 를 drill down 해서 들어가보면,
아래처럼 databaseName, username, password 등의 default 값이 정의 되어 있으며
또, getJdbcUrl 메소드를 제공하는데 default 값을 이용하여 구성하여 리턴합니다.
spring boot @ServiceConnection 어노테이션의 connectionDetails 가 정의되어 있으며, auto configuration 되어, connection 을 맺어 줍니다.
JdbcContainerConnectionDetailsFactory 에 중단점을 잡고 보면,
아래처럼 spring 의 auto configuration 에 의하여, getJdbcUrl 등이 호출되어, 연결을 맺어 주는 것을 볼 수 있습니다.
getContainerInfo, getLogs
spring 이 알아서 configuration 해주지만, 해당 값이 궁금하다면, 아래처럼 log 를 찍어서 확인해 볼 수 있습니다.
getLogs 메소드를 통해 testContainer 의 logs 도 가져올 수 있으며,
log 내에 특정 문구가 있는지를 체크하여, 테스트를 작성할 수도 있습니다.
저는 아래처럼 적용해 보았습니다.
assertTrue(containerLogs.contains("PostgreSQL init process complete"));
error 로그만 가져오는 것도 가능하며,
log.error(STR."### getLogs stderr only: \{postgres.getLogs(OutputFrame.OutputType.STDERR)}");
Slf4jLogConsumer 를 사용하여 지속적으로 로그를 streaming 하는 것도 가능합니다
Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log).withSeparateOutputStreams(); postgres.followOutput(logConsumer);
depedencies
종속성에서 spring-boot-testcontainers 의 구성을 살펴보면,
autoconfigure 와
testcontainers 로 구성되어 있는 것을 볼 수 있습니다.
특정 모듈을 개발한 것은 아니고, testcontainers 의 버전관리와, auto configuration 을 통해 사용을 편하게 해주는 upgrade 입니다.
Next
container Life cycle
https://ride-wind.tistory.com/96
References
Dan Vega ( spring advocate )
- github code example : https://github.com/danson-placeholder-service/posts
- youtube : https://www.youtube.com/watch?v=erp-7MCK5BU
spring advocate, dan vega 님의 예제코드와 youtube 영상입니다
Java 21 + Spring boot 3.2 를 사용하셨으며,
intellij 의 java 21 지원이 부족하여, --enable-preview
compilerArgs 도 추가해야 합니다
release note : spring boot 3.1 # testcontainers
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.1-Release-Notes#testcontainers
파란 하늘 지식창고 : https://luvstudy.tistory.com/248#article-2-3--testcontainers
SpringOne
introduction to Testcontainers
https://www.youtube.com/watch?v=HUZppOYDoXs
Josh Long
https://github.com/coffee-software-show/containers-at-development-time-with-spring-boot-3.1
Development-time containers with Spring Boot 3.1
https://www.youtube.com/watch?v=kWb-orCsCM0
'Spring > Test' 카테고리의 다른 글
spring boot 3.1 - testcontainers 2 - container lifecycle (0) 2023.12.28