-
@DataJpaTest 할 때의 주의 사항기록해야 기억한다/Spring 2021. 2. 2. 23:30
저는 테스트할때 보통 test/resources 에 application-test.yml 을 따로 설정해두고 테스트를 진행합니다.
그런데 아래와 같은 상황이 생겨서 한참 고민했는데 역시나 사람이 문제였습니다.
@DataJpaTest 인데 Unable to start ServletWebServerApplicationContext....가 뜬다!
분명히 JPA 테스트를 위해 @DataJpaTest 를 수행하는데 자꾸 servlet 관련 에러가 발생했고.... 왜 그러지? 뭔가 잘못됐나? 라고 하면서 test 리소스를 계속 찾았지만 이유를 찾지 못하여 급기야..아래처럼 처리하고 테스트를 진행했습니다.
@DataJpaTest(properties = "spring.main.web-application-type=none") class SampleDataTest { }
src/test/resources 라도 src/main/resources 를 우선한다!
이말은 즉, test 리소스폴더에는 application-test.yml 만 있고 main 리소스폴더에 application.yml 이 있으면 우선 그 설정을 읽고 test 리소스를 덮어쓰게 되어 있습니다.(properties 의 우선순위 참고 https://bj-lee.tistory.com/5)
그래서 다시 훑어봤습니다. main/resources/application.yml 을.....
역시나.. 평소와 다르게 spring.main.web-application-type: servlet 을 선언해놓고 있었고, 그러니 test 할때 계속...안되었던.....
결국 위에 properties 를 추가한 것도 같은 내용이였는데 한참을 고민하다 시간을 놓쳐버렸네요.
TEST 수행시에 spring.test propeties 가 있다!
보통 실제 데이터베이스를 사용하여 테스트를 수행한다면 아래처럼 사용하게 됩니다.
@DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) class MyTest{ }
그냥 당연히 저렇게 사용하고 있었는데, application.yml 에서도 동일한 설정을 사용할 수 있었네요. 아래처럼 쓰시면 됩니다. 차이는 단일 클래스에만 적용할건지 전체 test 환경에 적용할 건지의 차이라고 생각할 수 있을 것 같습니다.
동작은 위의 @AutoConfigureTestDatabase 와 같습니다.
spring.test.database.replace: none
그럼 다들 즐거운 테스트 되시길 바랍니다!!
반응형LIST'기록해야 기억한다 > Spring' 카테고리의 다른 글
Jackson - 다형성 유형의 serialize, deserialize 사용하기 (0) 2021.10.26 Spring REST 에서의 Global Exception (0) 2021.01.11 Spring Cloud OpenFeign, 그리고 SSL (2) 2020.12.29 스케줄러에 property 주입하기 (0) 2020.12.17 Spring Boot 의 properties (0) 2020.11.16