MockMVC는 Spring MVC 프레임워크에서 사용되는 테스트 헬퍼 클래스입니다. 이 클래스를 사용하면 컨트롤러에 대한 테스트를 쉽게 수행할 수 있고, 실제 서블릿 컨테이너를 구동하지 않고도 컨트롤러에 대한 테스트를 수행할 수 있습니다.
MockMVC를 사용하면 테스트에서 컨트롤러에 대한 요청과 응답을 쉽게 처리할 수 있으며, 이를 통해 컨트롤러가 올바르게 작동하는지 확인 할 수 있습니다.
Spring MVC 애플리케이션에서 MockMVC를 사용하려면 먼저 MockMVC 클래스의 인스턴스를 생성해야 합니다. 이를 위한 방법은 여러 가지가 있지만, 가장 일반적인 방법은 standaloneSetup() 메소드를 사용하는 것입니다. 이 메소드는 Spring MVC 테스트 헬퍼인 MockMvcBuilders 클래스에서 제공하며, 이를 사용하면 컨트롤러 클래스를 전달하여 MockMVC 인스턴스를 생성할 수 있습니다.
예를 들어, 아래와 같이 컨트롤러 클래스를 전달하여 MockMVC 인스턴스를 생성할 수 있습니다.
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new MyController()).build();
이제 생성된 mockMvc 인스턴스를 사용하여 컨트롤러에 대한 요청과 응답을 테스트 할 수 있습니다. 예를들어, 아래와 같이 GET 요청을 테스트 할 수 있습니다.
mockMvc.perform(get("/myEndpoint"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World!"));
여기서 mockMvc.perform() 메소드는 요청을 수행하며, 그 결과를 ResultActions 객체로 반환합니다. 그리고 andExpect() 메소드를 사용하여 응답의 상태 코드, 컨텐츠 등을 검증할 수 있습니다. 이렇게 하면 컨트롤러가 올바르게 작동하는지 테스트 할 수 있습니다.
또한, mockMvc.perform()메소드를 사용하여 다양한 요청을 수행 할 수 있습니다. 그 외에도 post, put, delete 등의 요청을 수행 할 수 있습니다. 이를 통해 컨트롤러에 대한 테스트를 쉽게 수행 할 수 있습니다.
요청 파라미터를 사용하는 테스트도 수행할 수 있습니다. 아래 예제에서는 요청 파라미터로 name 이라는 파라미터를 전달하고, 응답 결과를 검증하는 테스트를 수행합니다.
mockMvc.perform(get("/myEndpoint")
.param("name", "Gyuseok"))
.andExpect(status().isOk())
.andExpect(content().string("Hello Gyuseok!"));
또한, Request Body를 사용하는 테스트를 수행할 수도 있습니다. 아래 예제에서는 POST 요청을 수행하고, Request Body를 전달하는 테스트를 수행합니다.
String requestBody = "{\"name\":\"Gyuseok\"}";
mockMvc.perform(post("/myEndpoint")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk())
.andExpect(content().string("Hello Gyuseok!"));
이외에도, 다양한 테스트 케이스를 작성 할 수 있는데, 이는 개발하는 애플리케이션의 특성에 따라 달라질 수 있습니다.
andDo() 메소드는 응답 결과를 처리하는 방법을 정의할 수 있는 메소드 입니다. 이를 사용하면 응답 결과를 가공하거나 저장하는 등의 작업을 수행 할 수 있습니다.
예를 들어, 응답 결과를 JSON 형식으로 변환하는 작업을 하려면 아래와 같이 andDo() 메소드를 사용하면 됩니다.
MvcResult mvcResult = mockMvc.perform(get("/myEndpoint"))
.andDo(print())
.andReturn();
String responseBody = mvcResult.getResponse().getContentAsString();
이렇게 하면 responseBody 변수에 응답 결과가 저장됩니다.
그리고 andDo(print())를 사용하면 응답 결과를 콘솔에 출력 할 수 있습니다.
mockMvc.perform(get("/myEndpoint"))
.andDo(print())
.andExpect(status().isOk());'Spring & SpringBoot' 카테고리의 다른 글
| HashTag 검색 SQL 구현해보기 (0) | 2023.01.27 |
|---|---|
| Spring security 시작하기 (0) | 2023.01.20 |
| SpringBoot JPA 사용하기 (0) | 2022.12.30 |
| SpringBoot Swagger UI사용하기 (0) | 2022.12.19 |
| Spring AOP (0) | 2022.12.16 |