1. 현상
- @SpringBootTest로 통합 테스트를 관리하는 경우 테스트 시작 시 SQL Script를 통해 H2 in-memory-database에 초기화를 진행할 때 스크립트 중복 실행이 발생하여 DB Exception 발생
- 기본적으로 Spring boot JDBC Initializer는 fail-fast 전략으로 스크립트 실행 중 에러가 발생하면 중단시킴
2. 원인
- 통합테스트를 위해 필요한 Configuration을 정의 후 사용, 일부 테스트에서 개별적으로 @MockBean을 사용하여 Spring Context Recreated를 유발
Any existing single bean of the same type defined in the context will be replaced by the mock. If no existing bean is defined a new one will be added.
- @MockBean을 사용할 경우 Spring Context에 이미 Bean이 존재하더라도 대체. 각 테스트마다 @MockBean이 사용된다면 개별적인 Spring Context가 생성.
3. 해결 방안
- application.properties에 아래의 옵션 추가. 실행 중 스크립트로 인한 에러가 발생해도 중지하지 않음(Fail-Safe)
spring.datasource.continue-on-error=true
- @MockBean 어노테이션을 각 테스트 클래스마다 사용하지 말고 필요 한 부분을 추출하여 공통 Configuration으로 관리
- https://github.com/spring-projects/spring-boot/issues/10015
'자바 개발자되기' 카테고리의 다른 글
Java NIO - SocketChannel non-blocking mode에서 Read Timeout 설정 (0) | 2021.11.02 |
---|---|
Spring JPA findById() 사용 시 주의점 (1) | 2021.07.28 |
구체적인 Exception Catch를 해야하는 이유 (0) | 2021.04.22 |
Open Session In View와 트랜잭션, 그리고 영속성 컨텍스트 (0) | 2021.03.24 |
Java Ratelimiter - 초 당 처리량 조절하기 (1) | 2021.03.01 |