Spring Repository Test시 MySQL 사용 @DataJpaTest 에러 해결

꾸준하게 달리기~·2023년 7월 14일
0

스프링 + 자바

목록 보기
6/20
post-thumbnail
post-custom-banner

RepositoryTest중 마주친 에러

나는 개발할 때 내부 인메모리 DB가 아닌 MySQL을 사용하기로 했다.
(이전에 H2 사용해서, 또다른 경험을 하고자 + MySQL 더 익숙해지고자)

save의 테스트코드를 아래와 같이 작성했고,

@DataJpaTest만 붙이고 Repository의 save 테스트를 진행하면,
Failed to load ApplicationContext

이러한 에러가 나왔다.

그래서 구글링을 통해 찾아본 결과,
@AutoConfigureTestDatabase 애너테이션을 붙여 해결했다.

자세하게는,
해당 @AutoConfigureTestDatabase 에너테이션을

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

이와 같이 작성하여 해결하면 된다.


그럼 왜 해결될까?

Jpa와 DB관련하여 DB와 코드를 연결해주는
TestDatabaseAutoConfiguration 클래스를 살펴보면

위와 같이 기본값은 spring.test.database.replace: any로 셋팅 된다.

그렇다면 맨 처음과 같이
@AutoConfigureTestDatabase 없이
오직
@DataJpaTest만 붙이게 된다면,

위에서 셋팅된 기본값그대로
EmbeddedDataSourceFactory 클래스가
Bean으로 지정되고,

해당 Bean은 아래의 184행의 로직을 실행하게 된다.

그리고 184행 getEmbeddedDatabase()의 return 값을 보면,

위와 같이 H2, HSQLDB 등의 임베디드, 인메모리 DB로 연결되어
테스트시에는 MySQL과는 연결되지 않아 에러가 나오는 것이다.

마치며

그렇기에,

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

를 통해서
TestDatabaseAutoConfiguration클래스의 기본값 DataSource(H2, HSQLDB)가
bean으로 등록되지 않게 하면
DataSourceAutoConfiguration에 의해서 DataSource(내가 연결한 MySQL)가
등록되게 된다.

레퍼런스
https://kangwoojin.github.io/programing/auto-configure-test-database/

profile
반갑습니다~! 좋은하루 보내세요 :)
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

1개의 답글