스프링부트는 Spring MVC의 컨트롤러 테스트를 위해 @WebMvcTest
어노테이션을 제공한다. WebMvcTest는 MockMvc를 구성하기 때문에 모의 MVC 형태로 HTTP 서버를 구성할 필요 없이 신속한 테스트를 가능케 한다.
@SpringBootTest는 실제 어플리케이션과 동일하게 어플리케이션 컨텍스트를 로드하여 동작하므로 Bean의 개수가 늘어나면 주입 속도가 느려져 테스트 자체의 의미가 희석될 수 있다. 하지만 @WebMvcTest의 경우 MVC와 관련된 @Controller
, @ControllerAdvice
, @JsonComponent
, Converter
, GenericConverter
, Filter
, WebMvcConfigurer
그리고 HandlerMethodArgumentResolver
만 로드하기때문에 더 가벼운 테스트를 지원한다.(@Component
빈은 주입되지 않는다.)
1 | (SpringRunner.class) |
@WebMvcTest 어노테이션에 테스트 대상 컨트롤러를 명시하므로써 모든 컨텍스트를 로드하는 @SpringBootTest에 비해 가벼운 테스트가 가능하다.
스프링부트 레퍼런스에 의하면 @WebMvcTest만으로 테스트를 진행하는 것이 충분치 않을 경우가 있으므로 실제 서버와 완벽한 엔드-투-엔드 테스트를 위해선 @SpringBootTest를 사용하라고 말한다.
- andDo() : 요청 처리를 수행한다.
ex) mvc.perform(get(“/form”)).andDo(print()); - andExpect() : 예상 값을 검증한다
ex) mvc.perform(get(“/form”)).andExpect(matchAll(status().isOk(),redirectedUrl(“/person/1”))); - andReturn() : 요청 결과를 반환(?)
ResultActionsMockMvcResultMatchers
- content() : response body 검증
- cookie() : cookie 검증
- flash() : flash 속성 검증
- forwardedUrl(String expectedUrl) : 포워드 검증
- header() : response header 검증
- jsonPath(String expression, Matcher
matcher) : jsonPath 검증 - model() : 모델 검증
- redirectedUrl(String expectedUrl) : 리다이렉트 검증
- status() : 상태 값 검증
- view() : view name 검증