구현 기록/TestContiners
MariaDB TestContiner 적용
Pawer0223
2023. 6. 23. 18:25
현재 프로젝트에서는 RDS를 mariadb로 구성하여 사용하고 있다. 이를 위해 mariadb 테스트 컨테이너 환경을 구축했다.
또한 테스트 라이브러리로는 kotest를 사용하고 있다.
1. 테스트 컨테이너 의존성 추가.
build.gradle.kts
testImplementation("org.testcontainers:testcontainers:$testContainerVersion")
testImplementation("org.testcontainers:junit-jupiter:$testContainerVersion")
testImplementation("org.testcontainers:mariadb:$testContainerVersion")
2. mariadb 테스트 컨테이너 설정
TestContainers는 JDBC를 지원한다. URL을 통해 테스트 컨테이너 설정을 손쉽게 할 수 있다. - 공식문서
src/test/resources/application.yml
spring:
datasource:
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10.5:///
컨테이너 설정은 이게 끝이다.
3. Test 환경설정
@DataJpaTest로 두고 실행하면 기본적으로 embedded in-memory DB를 찾기 때문에 예외가 발생한다.
@DataJpaTest
They also use an embedded in-memory database (replacing any explicit or usually auto-configured DataSource). The @AutoConfigureTestDatabase annotation can be used to override these settings.
공식문서에서 시키는데로 @AutoConfigureTestDatabase설정을 해주면 된다.
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class MuckPotUserRepositoryTest(
@Autowired val muckPotUserRepository: MuckPotUserRepository
) : StringSpec({
"findByEmail 호출 성공" {
val user = muckPotUserRepository.findByEmail("user@naver.com")
user shouldBe null
}
})
4. 결과 확인
실행하면 테스트 컨테이너 관련한 로그가 쫙 뜰것이다.
브레이크 포인트를 찍고 디버깅 해보면 실행 중에 테스트 컨테이너와, 필요한 이미지에 대한 컨테이너들이 실행되는것을 볼 수 있다.
테스트가 종료되면 컨테이너는 종료, 삭제 된다.
남아있는 문제점..
현재 프로젝트는 멀티모듈 구조로 구성되어있다. 위 테스트는 Repository를 가지는 Domain 모듈에서 단위테스트를 적용했다.
하지만 Domain 모듈을 참조하는 API 모듈에서 통합테스트를 진행할 때는 어떻게 테스트컨테이너를 구성해야할까..?
Next
반응형