<
2021-09-17-CODE-REVIEW
>
🌠다음 포스팅🌠

객체지향 이론
☄이전 포스팅☄

2021-09-16-CODE-REVIEW
@WebMvcTest와 @SpringBootTest가 같이 사용될 수 없는 이유

서론

내가 처음 Springboot 를 배울때 mvc 테스트 하는 방식에 대해 방법이 많았지만 모두 이해할 수 없었다.

이제는 MVC 테스트에 대해 정리가 필요하다 느껴 정리해본다.

본론

1. @WebMvcTest

컨트롤러의 정확한 동작 여부를 확인하기 위한 도구 때문에 @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());
    }
}

2. @SpringBootTest

Spring Boot 의 통합테스트 어노테이션으로 단위테스트와 같이 기능 검증을 위한 도구가 아닌 전체적으로 흐름에 맞게 동작하는지 검증하기 위해 사용된다.

● 장점

● 단점

결론

Reference

MockMvc를 이용해서 테스트하기 @SpringBootTest

Top
Foot