티스토리 뷰
반응형
서론
내가 처음 Springboot 를 배울때 mvc 테스트 하는 방식에 대해 방법이 많았지만 모두 이해할 수 없었다.
이제는 MVC 테스트에 대해 정리가 필요하다 느껴 정리해본다.
본론
1. @WebMvcTest
컨트롤러의 정확한 동작 여부를 확인하기 위한 도구 때문에 @WebMvcTest(대상컨트롤러.class)
처럼 명시해줘야한다.
- @WebMvcTest 어노테이션을 사용시 다음 내용만 스캔 하도록 제한한다. (보다 가벼운 테스팅이 가능하다.)
@Controller
@ControllerAdvice,
@JsonComponent,
Converter,
GenericConverter,
Filter,
HandlerInterceptor,
WebMvcConf
● 장점
- WebApplication 관련된 Bean들만 등록하기 때문에 통합 테스트보다 빠르다.
- 통합 테스트를 진행하기 어려운 테스트를 진행 가능하다.
ex) 결제 모듈 API를 콜하며 안되는 상황에서 Mock을 통해 가짜 객체를 만들어 테스트 가능.
● 단점
- 요청부터 응답까지 모든 테스트를 Mock 기반으로 테스트하기 때문에 실제 환경에서는 제대로 동작하지 않을 수 있다.
다음은 갓대희 님의 테스트 예시를 보자
//@RunWith(SpringRunner.class) // ※ Junit4 사용시
@WebMvcTest(TestRestController.class)
@Slf4j
class TestRestControllerTest {
@Autowired
MockMvc mvc;
@MockBean
private TestService testService;
@Test
void getListTest() throws Exception {
//given
TestVo testVo = TestVo.builder()
.id("goddaehee")
.name("갓대희")
.build();
//given
given(testService.selectOneMember("goddaehee"))
.willReturn(testVo);
//when
final ResultActions actions = mvc.perform(get("/testValue2")
.contentType(MediaType.APPLICATION_JSON))
.andDo(print());
//then
actions .andExpect(status().isOk())
.andExpect(content()
.contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.name", is("갓대희")))
.andDo(print());
}
}
2. @SpringBootTest
Spring Boot 의 통합테스트 어노테이션으로 단위테스트
와 같이 기능 검증을 위한 도구가 아닌 전체적으로 흐름에 맞게 동작하는지
검증하기 위해 사용된다.
● 장점
- 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트가 가능하다.
- 전체적인 Flow를 쉽게 테스트 가능하다.
● 단점
- 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 시간이 오래걸리고 무겁다.
- 테스트 단위가 크기 때문에 디버깅이 어려운 편이다.
Reference
반응형
'SPRING 🍃' 카테고리의 다른 글
댓글 기능 추가 (0) | 2022.03.04 |
---|---|
엔티티 매핑 최적화 (0) | 2022.03.03 |
SpringBootServletInitializer 상속 (0) | 2022.02.26 |
[Junit.Test] initializationError (0) | 2021.03.24 |
[SPRING-BOOT] 프로젝트 분리 (0) | 2021.03.11 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- kakao
- 자바
- 디자인패턴
- 스프링부트
- interview
- java
- CS
- spring-cloud
- 백준
- Matlab
- 자격증
- ajax
- springboot
- C언어
- 알고리즘
- 면접
- 수학
- docker
- 프로그래머스
- security
- Algorithm
- JPA
- nginx
- 스프링
- OOP
- 릿코드
- Solid
- 매트랩
- 그래프
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함