728x90
반응형
SMALL
@SpringBootTest와 @WebMvcTest의 차이점을 설명해 주세요.
1. @SpringBootTest
- 이 어노테이션은 통합 테스트를 수행할 때 사용된다.
- @SpringBootTest 어노테이션을 사용하면 전체 Spring ApplicationContext를 로드한다.
- 이는 모든 Bean들을 초기화하고 모든 구성을 로드한다는 것을 의미한다.
- 따라서 애플리케이션의 전체 동작을 테스트하려는 경우에 사용된다.
- 하지만 이는 상당한 시간과 자원을 필요로 한다.
@SpringBootTest
public class ApplicationTest {
@Autowired
private MyService myService;
@Test
public void contextLoads() {
// 테스트 코드...
}
}
2. @WebMvcTest
- @WebMvcTest 어노테이션은 웹 계층만을 테스트하는 데 사용된다.
- Spring MVC 인프라를 설정하고 웹 관련 빈들만 로드한다.
- 컨트롤러, 컨트롤러 어드바이스, 필터, 인터셉터 등과 같은 웹 관련 구성만 로드한다는 것을 의미한다.
- 이 어노테이션은 MockMvc 인스턴스를 자동으로 제공하여, HTTP 요청을 디스패처 서블릿에 보내고 그 결과를 검증할 수 있다.
- **@WebMvcTest**는 빠른 피드백을 제공하며, 컨트롤러 단위 테스트를 하는 데 유용하다.
@WebMvcTest(MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testMyController() throws Exception {
this.mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World"));
}
}
따라서, @SpringBootTest와 @WebMvcTest의 주요 차이점은 테스트의 범위와 로드하는 ApplicationContext의 범위에 있다. @SpringBootTest는 전체 ApplicationContext를 로드하고, @WebMvcTest는 웹 계층에 관련된 부분만 로드한다.
SpringBoot에서 JUnit을 사용하여 테스트 코드를 작성할 때
@SpringBootTest 어노테이션을 자주 쓰게 되는데, 상황에 따라서는 @WebMvcTest를 쓰는게 좋을 때도 있다.
@SpringBootTest와 @WebMvcTest는 둘 다 Spring Boot 테스트를 위한 어노테이션입니다. 하지만 두 어노테이션은 사용되는 컨텍스트와 테스트의 범위에 따라 크게 다릅니다.
Junit이란 자바 개발자의 93%가 사용하는 단위 테스트 프레임워크이며 Java8 이상부터 지원한다.
JUnit5의 경우 2017년 10월에 공개
스프링부트의 경우 2.2버전부터 기본적으로 제공된다.
@SpringBootTest + @AutoConfigureMockMvc
- 프로젝트 내부에 있는 스프링 빈을 모두 등록하여 테스트에 필요한 의존성을 추가한다.
- 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다.
- 단위 테스트와 같이 기능 검증을 위한 것이 아니라, Spring Framework에서 전체적으로 Flow가 제대로 동작하는지 검증하기 위해 사용한다.
장점
- 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트가 가능하다.
단점
- 테스트 단위가 크기에 디버깅이 까다로움
- 어플리케이션의 설정, 모든 Bean을 로드하기 때문에 시간이 오래 걸림
@SpringBoottest
@AutoConfugurMockMvc
class SenderControllerTest {
@Autowited
private MockMvc mockMvc;
@Autowited
private ObjectMapper objectMapper;
@MockBean
private SenderService senderService;
}
@WebMvcTest
- MVC를 위한 테스트, 컨드롤러가 예상대로 작동되는지 테스트하기 위해 사용된다.
- Web Layer만 로드하며, @WebMvcTest어노테이션을 사용시 아래의 항목들만 스캔하도록 제한하여 보다 빠르고 가벼운 테스트가 가능하다.
장점
- WebApllication과 관련된 Bean들만 등록하기 때문에 @SpringBootTest보다 빠르다.
- 통합테스트를 진행하기 어려운 테스트를 개별적으로 진행 가능
단점
- Mock을 기반으로 테스트하기 때문에, 실제 환경에서는 예상 밖의 동작오류가 발생할 수 있다.(참고: 위의 @SpringBootTest에는 @ExtendWith(SpringExtension.class)가 포함되어있음)
- @WebMvcTest()의 프로퍼티로 테스트를 원하는 컨트롤러 클래스를 넣어준다.
@ExtendWith(SpringExtension.class)
@WebMvcTest(SenderController.class)
class SenderControllerTest {
@Autowited
private MockMvc mockMvc;
@Autowited
private ObjectMapper objectMapper;
@MockBean
private SenderService senderService;
@MockBean
private AraClient araClient;
}
728x90
반응형
LIST
'일상 > 스터디' 카테고리의 다른 글
6일차 과제 - TCP와 UDP의 공통점과 차이점 (0) | 2023.05.15 |
---|---|
6일차 과제 - 트랜잭션이 무엇인지 설명해 주세요. (0) | 2023.05.15 |
5일차 과제 - Rest Client (0) | 2023.05.12 |
4일차 과제 - 스프링 컨테이너 (0) | 2023.05.12 |
3일차 과제 제네릭, 컬렉션 클래스 (0) | 2023.05.12 |