ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @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

    댓글

Designed by Tistory.