작성
·
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)” 어노테이션도 같이 사용하면 됩니다.
해당 이슈의 자세한 내용과 해결 방법은 아래 링크를 참고해 주세요.
해당 답변이 도움이 되셨기를 바랍니다. 감사합니다.