내가 처음 Springboot 를 배울때 mvc 테스트 하는 방식에 대해 방법이 많았지만 모두 이해할 수 없었다.
이제는 MVC 테스트에 대해 정리가 필요하다 느껴 정리해본다.
컨트롤러의 정확한 동작 여부를 확인하기 위한 도구 때문에 @WebMvcTest(대상컨트롤러.class)
처럼 명시해줘야한다.
@Controller
@ControllerAdvice,
@JsonComponent,
Converter,
GenericConverter,
Filter,
HandlerInterceptor,
WebMvcConf
● 장점
ex) 결제 모듈 API를 콜하며 안되는 상황에서 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());
}
}
Spring Boot 의 통합테스트 어노테이션으로 단위테스트
와 같이 기능 검증을 위한 도구가 아닌 전체적으로 흐름에 맞게 동작하는지
검증하기 위해 사용된다.
● 장점
● 단점