- `문제점` : 설정 및 script 도 추가되고, 매번 테스트를 할 때마다 docker를 실행하고 종료해야한다.
<br>
## 2. Testcontainers 설치
- Testcontainers JUnit 5 지원 모듈 설치
org.testcontainersjunit-jupiter1.15.1test
- @Testcontainers
* JUnit 5 확장팩으로 테스트 클래스에 @Container를 사용한 필드를 찾아서 컨테이너 라이프사이클 관련 메소드를 실행해준다.
- @Container
* 인스턴스 필드에 사용하면 모든 테스트 마다 컨테이너를 재시작 하고, 스태틱 필드에 사용하면 클래스 내부 모든 테스트에서 동일한 컨테이너를 재사용한다.
- 여러 모듈을 제공하는데, 각 모듈은 별도로 설치해야 한다.
* Postgresql 모듈 설치
* https://www.testcontainers.org/modules/databases/
* https://www.testcontainers.org/modules/databases/postgres/
<br>
## 3. Testcontainers, 기능 살펴보기
- 컨테이너 만들기
* New GenericContainer(String imageName)
- 네트워크
* withExposedPorts(int...)
* getMappedPort(int)
+ container가 충돌하지 않는 port를 사용할 수 있도록 random하게 mapping 한 port 정보를 가져오기
- 환경 변수 설정
* withEnv(key, value)
+ 여러 개 설정 가능
- 명령어 실행
* withCommand(String cmd...)
- 사용할 준비가 되었는지 확인
* waitingFor(Wait)
* Wait.forHttp(String url)
* Wait.forLogMessage(String message)
- 로그 살펴보기
* getLogs()
* followOutput()
+ streaming 하는 방법
3부. 도커와 테스트
1. Testcontainers 소개
예시
로컬과 동일한 DB 종류를 사용 위해 설정 추가
script 추가
테스트용 DB
docker run -p 15432:5432 --name study-testdb -e POSTGRES_USER=studytest -e POSTGRES_PASSWORD=studytest -e POSTGRES_DB=studytest -d postgres
spring.datasource.url=jdbc:tc:postgresql:///studytest spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver