@SpringBootTest와 @WebMvcTest의 차이점을 설명해 주세요.

권성현·2023년 2월 27일
0

면접 준비

목록 보기
12/30
post-custom-banner

SpringBoot에서 JUnit을 사용하여 테스트 코드를 작성할 때
@SpringBootTest 어노테이션을 자주 쓰게 되는데, 상황에 따라서는 @WebMvcTest를 쓰는게 좋을 때도 있다.

📌Junit이란 자바 개발자의 93%가 사용하는 단위 테스트 프레임워크이며 Java8 이상부터 지원한다.
JUnit5의 경우 2017년 10월에 공개
스프링부트의 경우 2.2버전부터 기본적으로 제공된다.

@SpringBootTest + @AutoConfigureMockMvc

  • 프로젝트 내부에 있는 스프링 빈을 모두 등록하여 테스트에 필요한 의존성을 추가한다.
  • 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다.
  • 단위 테스트와 같이 기능 검증을 위한 것이 아니라, Spring Framework에서 전체적으로 Flow가 제대로 동작하는지 검증하기 위해 사용한다.

장점

  • 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트가 가능하다.

단점

  • 테스트 단위가 크기에 디버깅이 까다로움
  • 어플리케이션의 설정, 모든 Bean을 로드하기 때문에 시간이 오래 걸림

@WebMvcTest

  • MVC를 위한 테스트, 컨드롤러가 예상대로 작동되는지 테스트하기 위해 사용된다.
  • Web Layer만 로드하며, @WebMvcTest어노테이션을 사용시 아래의 항목들만 스캔하도록 제한하여 보다 빠르고 가벼운 테스트가 가능하다.

장점

  • WebApllication과 관련된 Bean들만 등록하기 때문에 @SpringBootTest보다 빠르다.
  • 통합테스트를 진행하기 어려운 테스트를 개별적으로 진행 가능

단점

  • Mock을 기반으로 테스트하기 때문에, 실제 환경에서는 예상 밖의 동작오류가 발생할 수 있다.

    @WebMvcTest()의 프로퍼티로 테스트를 원하는 컨트롤러 클래스를 넣어준다.
    (참고: 위의 @SpringBootTest에는 @ExtendWith(SpringExtension.class)가 포함되어있음)

profile
개발일지
post-custom-banner

0개의 댓글