인프런 커뮤니티 질문&답변

km6914님의 프로필 이미지
km6914

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Persistence Layer(2) 강의 질문있습니다.

작성

·

665

·

수정됨

1

안녕하세요.

Persistence Layer(2) 강의를 수강 중에 질문이 있습니다.

먼저, 저는 h2 database 대신 mysql을 사용하기로 해서, 아래와 같이 application.yml 파일을 작성했습니다.

그리고 build.gradle에 mysql import 부분 역시 등록하였습니다.

spring:
  profiles:
    default: local

  datasource:
    url: jdbc:mysql://localhost:3306/testing?useSSL=false&characterEncoding=UTF-8
    username: root
    password: [생략]
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: none

  sql:
    init:
      mode: always

---
spring:
  config:
    activate:
      on-profile: local

  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true # (2.5~) Hibernate 초기화 이후 data.sql 실행

#  h2:
#    console:
#      enabled: true

---
spring:
  config:
    activate:
      on-profile: test

  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
    properties:
      hibernate:
        format_sql: true

  sql:
    init:
      mode: never

 

그리고 ProductRepositoryTest를 실행한 결과, @SpringBootTest 어노테이션 상에서는 테스트가 정상적으로 작동이 되나, @DataJpaTest를 사용하면 아래와 같은 오류가 발생합니다.

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Failed to replace DataSource with an embedded database for tests. If you want an embedded database please put a supported one on the classpath or tune the replace attribute of @AutoConfigureTestDatabase.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Failed to replace DataSource with an embedded database for tests. If you want an embedded database please put a supported one on the classpath or tune the replace attribute of @AutoConfigureTestDatabase.

 

제 생각에는, application.yml 파일 설정에서 제가 잘못 하고 있는 것 같은데요, 혹시 어느 부분을 제가 놓치고 있는지 알고 싶습니다.

답변 2

1

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, km6914님! :)

제 답변이 조금 늦어서 AI 인턴이 먼저 답변을 주었네요.
관련해서 설명이 잘 나와있는 블로그가 있어 추가로 첨부드립니다.

https://kangwoojin.github.io/programing/auto-configure-test-database/

감사합니다. :)

1

안녕하세요, 인프런 AI 인턴이에요.

오류 메시지를 보면 “@AutoConfigureTestDatabase” 어노테이션의 “replace” 속성이나 클래스패스에 지원되는 임베디드 데이터베이스를 추가해야 한다고 나와있는 것으로 보입니다.

해당 에러는 테스트 환경에서 임베디드 데이터베이스를 사용하려고 시도하지만, 우리의 경우 MySQL DB를 사용하므로 이 에러가 발생한 것으로 추측됩니다.

해결 방법으로는 “@DataJpaTest” 어노테이션을 사용하는 대신에 “@SpringBootTest” 어노테이션과 “@Transactional” 어노테이션을 함께 사용하거나, “@DataJpaTest”와 함께 “@AutoConfigureTestDatabase(replace = Replace.NONE)” 어노테이션도 같이 사용하면 됩니다.

해당 이슈의 자세한 내용과 해결 방법은 아래 링크를 참고해 주세요.

해당 답변이 도움이 되셨기를 바랍니다. 감사합니다.

km6914님의 프로필 이미지
km6914

작성한 질문수

질문하기