[JUnit5] Spring Boot Test DB 분리

u-nij·2022년 11월 2일
1

TDD

목록 보기
1/3
post-thumbnail

개발환경에서 MySQL를 사용하고 있는데, 테스트 코드를 작성할 때 데이터베이스의 분리가 필요하다고 생각되어 H2를 따로 연결하게 되었다.

H2 연결

build.gradle

	runtimeOnly 'mysql:mysql-connector-java' // 개발 환경에서 사용하는 DB(MySQL)
	runtimeOnly 'com.h2database:h2' // 테스트 코드 작성시 사용할 DB(H2)

application.yml

  • 위치: src/test/resources/application.yml
  • H2에서 데이터베이스를 미리 생성해주어야 한다.
spring:
  datasource:
    initialization-mode: always
    url: jdbc:h2:tcp://localhost/~/test
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
logging.level:
  org.hibernate.SQL: debug
  • jpa.hibernate.ddl-auto: create: 기존 테이블 삭제 후 다시 생성한다.
  • jpa.properties.hibernate.format_sql: true: DB 쿼리를 포맷해 보기 좋게 보여준다.
  • logging.level.org.hibernate.SQL: debug: 로그의 ?에 어떤 값이 들어갔는지 확인할 수 있다.

H2 DB를 In-Memory 방식으로 사용할 수도 있다.(링크 참조)
spring.datasource.urljdbc:h2:mem을 작성해거나, spring.datasource의 값들을 다 삭제하면 된다.

Test Class

만약, MySQL을 사용하다가 DB를 분리했을 경우 java.lang.illegalstateexception: failed to load applicationcontext 에러가 발생할 수도 있다. 보통 H2 DB를 켜두지 않았거나, H2와 MySQL 연결에 혼동이 생겨 발생하는 에러인 듯 하다.

@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class XXXTest {
	// ...
}

테스트 클래스에 @AutoConfigureTestDatabase 어노테이션을 사용해 H2 DB와 연결할 것임을 명시해주면 된다.

profile
삶은 달걀이다

0개의 댓글