Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ObjectOptimisticLockingFailureException 처리
- java
- 형상관리
- jpa
- redissonlock aop
- netty
- Spring Cloud Gateway
- ObjectOptimisticLockingFailureException
- spring DI
- 백준
- 알고리즘
- kotest testcontainers
- AccessToken
- TestContainers
- @transactional
- DI
- OptimisticLock
- interface
- S3
- 낙관적 락 롤백
- springsecurity
- 소수찾기 java
- Invalid property 'principal.username' of bean class
- 우아한 테크러닝
- RefreshToken
- multimodule testcontainers
- spring aop
- 멀티모듈 테스트컨테이너
- aop
- 낙관적 락 재시도
Archives
- Today
- Total
조급하면 모래성이 될뿐
MariaDB TestContiner 적용 본문
현재 프로젝트에서는 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
반응형
'구현 기록 > TestContiners' 카테고리의 다른 글
멀티모듈 + 테스트컨테이너 모듈 별 설정 분리 (0) | 2023.06.26 |
---|---|
Kotest + TestContainers Global 설정 (0) | 2023.06.24 |
멀티모듈에서 통합테스트 (0) | 2023.06.23 |
TestContiners를 왜 썼는가 (0) | 2023.06.23 |