tonykang22 / study

0 stars 0 forks source link

[The JAVA, 테스트] 3부. 도커와 테스트 #9

Open tonykang22 opened 2 years ago

tonykang22 commented 2 years ago

3부. 도커와 테스트

1. Testcontainers 소개

예시

테스트용 DB

docker run -p 15432:5432 --name study-testdb -e POSTGRES_USER=studytest -e POSTGRES_PASSWORD=studytest -e POSTGRES_DB=studytest -d postgres


- `문제점` : 설정 및 script 도 추가되고, 매번 테스트를 할 때마다 docker를 실행하고 종료해야한다.

<br>

## 2. Testcontainers 설치

- Testcontainers JUnit 5 지원 모듈 설치
org.testcontainers junit-jupiter 1.15.1 test

- @Testcontainers
    * JUnit 5 확장팩으로 테스트 클래스에 @Container를 사용한 필드를 찾아서 컨테이너 라이프사이클 관련 메소드를 실행해준다.
- @Container
    * 인스턴스 필드에 사용하면 모든 테스트 마다 컨테이너를 재시작 하고, 스태틱 필드에 사용하면 클래스 내부 모든 테스트에서 동일한 컨테이너를 재사용한다.
- 여러 모듈을 제공하는데, 각 모듈은 별도로 설치해야 한다.
    * Postgresql 모듈 설치
    * https://www.testcontainers.org/modules/databases/
    * https://www.testcontainers.org/modules/databases/postgres/
org.testcontainers postgresql 1.15.1 test

- application.properties (참고 : https://www.testcontainers.org/modules/databases/jdbc/)

spring.datasource.url=jdbc:tc:postgresql:///studytest spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver



<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 하는 방법