개발 이론/Spring
[Spring] SpringBoot 테스트에 테스트용 데이터베이스 연결
dal_been
2023. 11. 7. 23:11
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 파일이 스캔되어 데이터베이스가 생성된다