테스트 DB를 PostgreSQL로 전환

Yuri Lee·2020년 12월 3일
0

테스트 DB를 운영용 DB와 같은 유형으로 바꾸자.

  • JPA 또는 하이버네이트가 만들어주는 쿼리가 각 DB밴더에 따라 다르다.
  • 하지만 테스트용 DB를 운영하는 것은 번거롭다. CI 환경은?
  • 그래서 TestContainers를 사용한다.
  • https://www.testcontainers.org/

도커를 사용하도록 할 것임. 그러면 도커 컨테이너에 띄워놔야 한다. 하지만 그렇게 하지 않고 테스트를 실행할 때 컨테이너를 띄워주는 TestContainers 라는 tool이 있다.

TestContainers 설치

잘 적용되어있는지 확인하기. Test Resources 로 설정되어 있다.

ConsoleEmailService.java 에 test도 추가해주자. 왜? 이메일 서비스로 등록된 빈이 없기 때문에 에러가 날 것이다. 안 그래도 테스트 컨테이너 하나 띄우는 것도 느린데 매번 클래스마다 띄우는 것은 비효율적이다. 그래서 AbstractContainerBaseTest.java를 만드는 것이다.

AbstractContainerBaseTest .java

import org.testcontainers.containers.PostgreSQLContainer;

public abstract class AbstractContainerBaseTest {

    static final PostgreSQLContainer POSTGRE_SQL_CONTAINER;

    static {
        POSTGRE_SQL_CONTAINER = new PostgreSQLContainer();
        POSTGRE_SQL_CONTAINER.start();
    }

}
  • 클래스 로딩할 때 static 블럭이 한번만 호출된다.
  • h2를 더 이상 사용하지 않으므로 삭제해준다. 기존까지는 h2를 사용해서 데이터베이스를 사용했다. 이제 postgresql만 있고, test 할때는 컨테이너를 사용해서 띄워준다. 이제 테스트를 할때 테스트 컨테이너만 뜰 것이다.

TestContainers PostgreSQL 모듈 설치

  • pom.xml에 dependency 추가

스프링 부트 연동

  • application-test.properties 만들고 설정하기

모든 테스트에서 컨테이너 하나 사용하기

시나리오

MockMvcTest.java 에서 @ActiveProfiles에 test를 지정했으면 resource/application-test.properties가 읽힐 것이다. 그러면 이 파일에서 설정한 driver 대로 데이터 소스가 만들어질 것이다. 그럼 이 데이터 소스를 test에서 사용하는 것이다.


출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발

profile
Step by step goes a long way ✨

0개의 댓글