SpringBoot에서 JUnit을 사용하여 테스트 코드를 작성할 때
@SpringBootTest
어노테이션을 자주 쓰게 되는데, 상황에 따라서는 @WebMvcTest
를 쓰는게 좋을 때도 있다.
📌Junit이란 자바 개발자의 93%가 사용하는 단위 테스트 프레임워크이며 Java8 이상부터 지원한다.
JUnit5의 경우 2017년 10월에 공개
스프링부트의 경우 2.2버전부터 기본적으로 제공된다.
- 프로젝트 내부에 있는 스프링 빈을 모두 등록하여 테스트에 필요한 의존성을 추가한다.
- 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다.
- 단위 테스트와 같이 기능 검증을 위한 것이 아니라, Spring Framework에서 전체적으로 Flow가 제대로 동작하는지 검증하기 위해 사용한다.
장점
- 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트가 가능하다.
단점
- 테스트 단위가 크기에 디버깅이 까다로움
- 어플리케이션의 설정, 모든 Bean을 로드하기 때문에 시간이 오래 걸림
@WebMvcTest
- MVC를 위한 테스트, 컨드롤러가 예상대로 작동되는지 테스트하기 위해 사용된다.
- Web Layer만 로드하며, @WebMvcTest어노테이션을 사용시 아래의 항목들만 스캔하도록 제한하여 보다 빠르고 가벼운 테스트가 가능하다.
장점
- WebApllication과 관련된 Bean들만 등록하기 때문에 @SpringBootTest보다 빠르다.
- 통합테스트를 진행하기 어려운 테스트를 개별적으로 진행 가능
단점
-
Mock을 기반으로 테스트하기 때문에, 실제 환경에서는 예상 밖의 동작오류가 발생할 수 있다.
@WebMvcTest()의 프로퍼티로 테스트를 원하는 컨트롤러 클래스를 넣어준다.
(참고: 위의 @SpringBootTest에는 @ExtendWith(SpringExtension.class)가 포함되어있음)