본문 바로가기
개발 이론/Spring

[Spring] SpringBoot 테스트에 테스트용 데이터베이스 연결

by dal_been 2023. 11. 7.
728x90

테스트 코드를 실행할때 실제 DB에 접근하는 경우가 있을 것이다.

이런 경우 메인 어플리케이션이 로드될때마다 테이블을 드롭하고 생성하는 경우가 아니면

  • 이미 insert된 primary key를 다시 테스트해서 충돌발생
  • Auto increment key라면 @Trancsaction이나 delete로 지우더라도 key값은 증가

 

따라서 메인의 데이터베이스와 테스트의 데이터베이스 분리가 필요하다

 


application.yml 또는 application.properties

 

보통 application 파일에 데이터베이스 설정을 작성해주면 스프링부트가 자동으로 DataSrouce 빈으로 데이터베이스 정보를 등록해주어 사용할 수 있게 된다

 

그렇다면 테스트 데이터베이스는 어떻게 분리할까?

 

테스트는 인메모리로 간편하게 h2 데이터베이스를 사용한다고 해보자

/test/resources/application.yml

spring:
    datasource:
       driver-class-name: org.h2.Driver
       url: jdbc:h2:mem:testdb;MODE=MySQL;
       username: test
       password:

 

위와 같이 설정하면 테스크 코드가 실행될때 설정한 데이터베이스가 메모리에 올라가고, 테스트 종료시 데이터베이스가 메모리에서 내려가게 된다

 

다만 주의할점은 테스트 데이터베이스는 메인 데이터베이스처럼 스키마가 생성되지 않는다.

따라서 test/resources 에 schema.sql파일을 작성해서 넣어줘야한다

그렇게 하면 스프링 부트가 실행되면서 자동으로 schema.sql 파일이 스캔되어 데이터베이스가 생성된다