포도가게의 개발일지

[Spring] java.lang.IllegalStateException: Failed to load ApplicationContext 본문

Spring boot

[Spring] java.lang.IllegalStateException: Failed to load ApplicationContext

grape.store 2022. 1. 21. 19:03
반응형

@SpringBootTest

  • ApplicationContext에 모든 Bean들을 등록한다.
  • SpringBoot 어플리케이션을 실행했을 때와 동일하게 컨테이너에 Bean들을 등록한다.

@DataJpaTest

  • ApplicationContext에 JPA에 필요한 설정들만 등록한다.
  • 기본적으로 in-memory embedded DB(ex. H2)를 사용한다.
  • Component Scan을 하지 않아 컨테이너에 @Component 빈들이 등록되지 않는다.
  • Jpa관련 테스트를 할때 @DataJpaTest를 이용해서 진행하면 필요한 Configuration만 주입받아서 빠르게 테스트를 진행할 수 있고 롤백도 되어서 간단하게 결과를 확인할 수 있는 장점이 있다.

하지만 메모리 DB인 H2 데이터베이스를 이용하지 않고 Mysql 처럼 물리 데이터 베이스를 이용해서 테스트를 할려하였는데 아래와 같은 error가 발생하였다.

? @DataJpatest default로 embedded datasource를 참조한다. 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.

 

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class CommentRepositoryTest {
  • (replace = Replace.NONE)를 통해서 TestDatabaseAutoConfiguration에서 DataSource가 bean으로 등록되지 않게 하면 DataSourceAutoConfiguration에 의해서 DataSource가 등록되게 된다.
  • 그러면 property에 설정한 dataSource의 설정 값을 확인하여 적절한 DataSource를 생성하게 된다. SpringBoot 2.0 이상부터는 HikariDataSource가 Default로 등록이 되게 된다.
  • 이런식으로 DataJpaTest를 이용하면서 실제 데이터베이스로 테스트를 해보기 위해서는 AutoConfigureTestDatabase를 이용해서 EmbeddedDatabase 설정이 되지 않게 해주어야 한다.

'Spring boot' 카테고리의 다른 글

Dependency Injection? IoC?  (0) 2022.01.31
[Java] JVM과 자바 메모리 구조  (0) 2022.01.22
[JAVA] Generic  (0) 2022.01.21
[Spring]Transaction?  (0) 2022.01.20
[JAVA] Annotation?  (0) 2022.01.20
Comments