@SpringBootTest, @WebMvcTest

@SpringBootTest + @AutoConfigureMockMvc

특징

  • 프로젝트 내부 스프링 빈을 모두 등록하여 테스트에 필요한 의존성 추가
  • 실제 운영 환경에서 사용될 클래스를 통합 테스트
  • 단위 테스트와 같은 기능 테스트가 아닌 전체적인 흐름과 동작을 검증

장점

  • 모든 스프링 빈을 등록하기에 운영환경과 가장 유사한 테스트 가능

단점

  • 테스트 단위가 크기에 디버깅 쉽지 않음
  • 비교적 로딩시간이 오래 걸림

 

@WebMvcTest

특징

  • MVC를 위한 테스트, Controller가 예상대로 동작하는지 테스트하기 위함
  • Web Layer만 로드
  • 해당 어노테이션 사용 시 다음과 같은 항목만 제한하여 스캔하기에 빠르고 가벼운 테스트 가능

  • Security, Filter, Interceptor, request/response Handling, Controller의 항목들만 스캔하도록 제한하며, @Component는 대상에서 제외

장점

  • WebApplication과 관련된 Bean들만 등록하기 때문에 @SpringBootTest보다 빠름
  • 통합테스트를 진행하기 어려운 테스트 개별 진행 가

단점

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

 

추가질문

@AutoConfigureMockMvc은 언제 사용하는가?

  • Mock Test 시 필요한 의존성 제공
  • @WebMvcTest가 아닌 @SpringBootTest에서도 Mock 테스트를 가능하게 해줌
  • MockMvc 객체를 통한 실제 컨테이너가 아닌 로직상 테스트 가능
Mock Test 시 필요한 의존성 제공 @WebMvcTest가 아닌 @SpringBootTest에서도 Mock 테스트를 가능하게 해줌 MockMvc 객체를 통한 실제 컨테이너가 아닌 로직상 테스트 가능

 

@ActiveProfiles는 언제 사용하는가?

  • 프로파일 전략을 사용 중이라면 원하는 프로파일 환경 값 설정 가능
@ActiveProfiles("test")

 

Mock?

  • 테스트 작성을 위한 환경 구축이 어렵거나, 특정 경우 및 순간에 의존적인 경우 테스트 작성시간을 단축하기 위해 사용
  • 실제를 모방한 가짜 객체
  • 실제 객체로 동작 시 Mock 객체와 다르게 동작할 수 있음

 

MockBean?

  • Mock 객체를 빈 등록
  • Spring의 ApplicationContext는 Mock 객체를 빈으로 등록하며, 이미 동일한 타입 동일 객체가 빈으로 등록 시 해당 빈은 선언한 @MockBean으로 대체

 

참고자료

46. Testing (spring.io)

 

46. Testing

A Spring Boot application is a Spring ApplicationContext, so nothing very special has to be done to test it beyond what you would normally do with a vanilla Spring context. By default, @SpringBootTest will not start a server. You can use the webEnvironment

docs.spring.io

[스프링부트 (9)] SpringBoot Test(2) - @SpringBootTest로 통합테스트 하기 (tistory.com)

 

[스프링부트 (9)] SpringBoot Test(2) - @SpringBootTest로 통합테스트 하기

[스프링부트 (9)] SpringBoot Test(2) - @SpringBootTest로 통합테스트 하기 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 통합 테스트 하기 (@SpringBootTest)] 입니다. : ) 0. 들어가기 앞서 이번 포스

goddaehee.tistory.com

@SpringBootTest, @AutoConfogureMockMvc, 그리고 @WebMvcTest (tistory.com)

 

@SpringBootTest, @AutoConfogureMockMvc, 그리고 @WebMvcTest

JUnit과 단위테스트 SpringBoot에서 JUnit를 사용하여 테스트 코드를 작성할때, 대표적으로 @SpringBootTest와 @WebMvcTest를 사용하는 경우가 많다. 처음에는 둘의 차이를 간단하게 @SpringBootTest는 모든 빈을

astrid-dm.tistory.com

[Spring Boot] @SpringBootTest와 @WebMvcTest (tistory.com)

 

[Spring Boot] @SpringBootTest와 @WebMvcTest

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

wiselog.tistory.com

 

'F.W > Spring & Spring Boot' 카테고리의 다른 글

스프링 REST 클라이언트  (1) 2023.05.12
스프링 컨테이너  (0) 2023.05.11