[@SpringBootTest VS @WebMvcTest]

띵쿡·2022년 2월 21일
0

[@SpringBootTest]

SpringBootTest의 경우 일반적인 테스트로 slicing을 전혀 사용하지 않기 때문에 전체 응용 프로그램 컨텍스트를 시작한다. 전체 응용 프로그램을 로드하여 모든 bean을 주입하기 때문에 속도가 느리다. 통합 테스트를 할 때 많이 사용한다. 필요한 빈만을 등록하여 테스트를 진행하고자 한다면 슬라이스 테스트 어노테이션인 @WebMvcTest를 사용하는 것이 더 효율적이다.


[@WebMvcTest] --> controller만 테스트

WebMvcTest의 경우는 Controller layer를 테스트하고 모의 객체를 사용하기 때문에 나머지 필요한 bean을 직접 세팅해줘야 한다. 그렇기 때문에 가볍고 빠르게 테스트 가능하다. 보통 컨트롤러 하나만 테스트하고 싶을 때 사용한다. @WebMvcTest()의 프로퍼티로 테스트를 원하는 컨트롤러 클래스를 넣어준다. @WebMvcTest는 @Controller같은 웹과 관련된 빈만 주입되며,
@Service와 같은 일반적인 @Component는 생성되지 않는 특성 때문에 해당 컨트롤러를 생성하는 데 필요한 다른 빈을 정의하지 못해 발생한다.

따라서 이런 경우에는 @MockBean을 사용해서 필요한 의존성을 채워주어야 한다.

0개의 댓글