[JUnit] MockMvc Test code

Coodori·2023년 3월 21일
0

CherishU

목록 보기
10/29

MockMvc

실제 객체와 비슷하지만 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 애플리케이션 서버에 배포하지 않고도 스프링 MVC 동작을 재현할 수 있는 클래스를 의미합니다.

사용

여기서 저는 @RestControllerAdvice 적용한 부분을 테스트 해보기 위해 해당 테스트 코드를 작성했습니다.

  • mockMvc 생성

    • 적용을 원하는 컨트롤러와 추가적으로 예외처리를 받을 클래스를 골라서 해당 Mockmvc객체를 만든다.
     MockMvc mockMvc = MockMvcBuilders.standaloneSetup(memberController)
                    .setControllerAdvice(GlobalExceptionHandler.class)
                    .build();
  • 생성된 객체를 통해 GET/POST/DELETE/PUT 이 가능하다.

    MvcResult result = mockMvc.perform(
                            post("/member/register") // 없는 요청
                                    .content("{}")
                                    .contentType(MediaType.APPLICATION_JSON_VALUE))
                    .andDo(MockMvcResultHandlers.print())
                    .andExpect(MockMvcResultMatchers.status().is5xxServerError())
                    .andReturn();
    • perform()
      요청을 전송하는 역할을 합니다. 결과로 ResultActions 객체를 받으며, ResultActions 객체는 리턴 값을 검증하고 확인할 수 있는 andExcpect() 메소드를 제공해줍니다.

    • params()
      파라미터를 넣을 수 있습니다. 여기에는 사용하지 않았습니다.

    • andDo()
      요청 및 응답 메세지를 전부 확인 가능합니다.

    • andExpect()
      응답 검증하는 역할을 합니다.

      status()
      isOk() : 200
      isNotFound() : 404
      isMethodNotAllowed() : 405
      isInternalServerError() : 500

      view()
      ex) view().name("blog") : 리턴하는 뷰 이름이 blog인가?

      많은 응답에 대한 검증들을 제공합니다.
      추가로 Assertions 처럼 Test시 예측한 결과와 다르면 같은 빨간 x로고가 뜹니다.

전체코드

@Test
    void 예외문구_처리() throws Exception {
        MockMvc mockMvc = MockMvcBuilders.standaloneSetup(memberController)
                .setControllerAdvice(GlobalExceptionHandler.class)
                .build();

        MvcResult result = mockMvc.perform(
                        post("/member/register") // 없는 요청
                                .content("{}")
                                .contentType(MediaType.APPLICATION_JSON_VALUE))
                .andDo(MockMvcResultHandlers.print())
                .andExpect(MockMvcResultMatchers.status().is5xxServerError())
                .andReturn();

        String content = result.getResponse().getContentAsString();
        System.out.println(content);
    }

Reference

https://shinsunyoung.tistory.com/52
https://wedul.site/131

profile
https://coodori.notion.site/0b6587977c104158be520995523b7640

0개의 댓글