https://github.com/code-chobo/dev-api 프로젝트를 진행하며 쓰는 회고입니다.

@DataJpaTest

application-test.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/codechobo_test?serverTimezone=Asia/Seoul&useSSL=false
    username: codechobo_user
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: create
    database-platform: org.hibernate.dialect.MySQL57Dialect

상황 :

@DataJpaTest 테스트를 실행했을 때
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ACCOUNT" not found; SQL statement:...
같은 에러가 뜬다.

문제점 :

분명히 application-test.ymldatasourcemysql로 잡아주었는데도 임베디드디비인 h2 에서 에러가 난다.
왜 이런 건지 알아보니, @DataJpaTest는 데이터 소스가 저렇게 되있어도 임베디드 디비를 쓴다!

해결 :

따라서 @DataJpaTest 를 사용하는 테스트 클래스 위에 @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)를 붙여줘서 임베디드 디비로 대체하지 않고, 설정 파일에 적시된 데이터소스를 사용하게끔 했다.

+ Recent posts