반응형
해당 글에서는 Spring Framework을 기준으로 MockMvc, ResultActions, MvcResult에 대해 확인합니다.
1) MockMvc
💡 MockMvc
- 스프링 프레임워크에서 제공하는 테스트용 라이브러리입니다. 이 라이브러리를 사용하면 Spring MVC 컨트롤러의 단위 테스트를 쉽게 작성할 수 있습니다.
- MockMvc를 사용하면 HTTP 요청을 작성하고 컨트롤러의 응답을 검증할 수 있습니다. 이를 통해 통합 테스트를 실행하지 않고도 컨트롤러의 동작을 확인할 수 있습니다.
- import org.springframework.test.web.servlet.MockMvc 패키지를 임포트 하여서 사용합니다.
1. MockMvc Class Method
메서드 | 리턴 값 | 설명 |
perform() | ResultActions | - MockMvc를 사용하여 HTTP 요청을 수행합니다. - 이 메서드를 사용하여 웹 애플리케이션의 컨트롤러를 호출하고 요청 및 응답을 테스트할 수 있습니다. |
getDispatcherServlet() | DispatcherServlet | - MockMvc를 사용하여 내부적으로 사용되는 DispatcherServlet을 가져옵니다. - 이 메서드를 사용하여 DispatcherServlet의 구성 설정이나 상태를 테스트할 수 있습니다. |
2. MockMvc 사용 예시
// MockMvc를 사용하여 HTTP GET 요청 수행 예시
MvcResult result = mockMvc.perform(get("/api/users"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andReturn();
// MockMvc를 사용하여 HTTP POST 요청 수행 예시
String requestBody = "{\\\\"username\\\\":\\\\"john\\\\", \\\\"password\\\\":\\\\"secret\\\\"}";
MvcResult result = mockMvc.perform(post("/api/users")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isCreated())
.andReturn();
// DispatcherServlet의 구성 설정 확인 예시
DispatcherServlet dispatcherServlet = mockMvc.getDispatcherServlet();
WebApplicationContext webApplicationContext = dispatcherServlet.getWebApplicationContext();
SomeConfiguration configuration = webApplicationContext.getBean(SomeConfiguration.class);
// configuration의 필요한 구성 설정을 확인하고 테스트할 수 있습니다.
2) ResultActions
💡 ResultActions
- MockMvc를 사용하여 실행한 ‘HTTP 요청에 대한 결과’를 나타냅니다. 이를 통해 컨트롤러의 응답을 검증하고 원하는 동작을 수행할 수 있습니다.
- org.springframework.test.web.servlet 패키지를 임포트 하여 사용합니다.
1. ResultActions Class Method
메서드 | 리턴 값 | 설명 |
andDo() | ResultActions | 이 메서드를 사용하여 테스트 도중 추가적인 작업을 수행할 수 있습니다. |
andExpectAll() | ResultActions | 이전 요청에 대한 응답을 검증하기 위한 다양한 조건을 설정합니다. 상태 코드, 응답 본문 유형, 헤더 등을 확인할 수 있습니다. |
andReturn() | MvcResult | 이전 요청에 대한 결과를 반환합니다. 응답의 상태, 본문, 헤더 등을 확인하거나 다른 조작을 수행할 수 있습니다. |
2. ResultActions 사용 예시
@Test
public void testExample() throws Exception {
// 테스트를 위한 MockMvc 객체 생성
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
// GET 요청 보내기
MvcResult result = mockMvc.perform(get("/example"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.message").value("Success"))
.andReturn();
// 추가적인 작업을 수행하기 위해 andDo() 메서드 사용
result.andDo(print());
// 다른 조작을 수행하기 위해 andReturn() 메서드 사용
MvcResult modifiedResult = result.andReturn();
// 결과 확인
assertEquals("application/json", modifiedResult.getResponse().getContentType());
}
3) MvcResult
💡 MvcResult
- MockMvc에서 수행된 MVC 요청의 결과에 대한 상세한 정보를 제공합니다. 이 클래스는 응답 상태, 헤더, 내용 등과 같은 정보를 추출하기 위한 다양한 메서드를 포함하고 있습니다.
- org.springframework.test.web.servlet 패키지를 임포트하여 사용합니다.
1. MvcResult Class Method
메서드 | 리턴 값 | 설명 |
getAsyncResult() | Object | 비동기 요청의 결과를 가져옵니다. |
getFlashMap() | FlashMap | 플래시 맵을 가져옵니다. |
getHandler() | Object | 현재 요청에 대한 핸들러 메서드를 가져옵니다. |
getInterceptors() | HandlerInterceptor[] | 현재 요청에 적용된 인터셉터 배열을 가져옵니다. |
getModelAndView() | ModelAndView | 모델과 뷰를 가져옵니다. |
getRequest() | MockHttpServletRequest | 현재 요청 객체를 가져옵니다. |
getResponse() | MockHttpServletResponse | 현재 응답 객체를 가져옵니다. |
getResolvedException() | Exception | 현재 요청에서 해결된 예외를 가져옵니다. |
2. MvcResult 사용 예시
// getAsyncResult() : 비동기 요청의 결과를 가져오는 예시입니다.
Object result = mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andReturn()
.getAsyncResult();
// getFlashMap(): 플래시 맵을 가져오는 예시입니다.
FlashMap flashMap = mockMvc.perform(post("/api/submit")
.flashAttr("data", data))
.andExpect(status().isFound())
.andReturn()
.getFlashMap();
// getHandler(): 현재 요청에 대한 핸들러 메서드를 가져오는 예시입니다.
Object handler = mockMvc.perform(get("/api/hello"))
.andExpect(status().isOk())
.andReturn()
.getHandler();
// getInterceptors() : 현재 요청에 적용된 인터셉터 배열을 가져오는 예시입니다.
HandlerInterceptor[] interceptors = mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andReturn()
.getInterceptors();
// getModelAndView() :모델과 뷰를 가져오는 예시입니다.
ModelAndView mav = mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andReturn()
.getModelAndView();
// getRequest(): 현재 요청 객체를 가져오는 예시입니다.
MockHttpServletRequest request = mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andReturn()
.getRequest();
// getResponse(): 현재 응답 객체를 가져오는 예시입니다.
MockHttpServletResponse response = mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andReturn()
.getResponse();
// getResolvedException() : 현재 요청에서 해결된 예외를 가져오는 예시입니다.
Exception resolvedException = mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andReturn()
.getResolvedException();
오늘도 감사합니다. 😀
반응형
'Java > API Document' 카테고리의 다른 글
[Java/API] InetAddress Class API Document 읽어보기 : Java 11 (0) | 2024.03.09 |
---|---|
[Java/API] SimpleDataFormat Class API Document 읽어보기 : Java 11 (1) | 2024.01.24 |
[Java/API] Assertions Method API Document : JUnit 5 (0) | 2023.12.15 |
[Java/API] LinkedList Method API Document : Java 11 (0) | 2023.11.18 |
[Java/API] WebClient Method API Document : Java 11 (0) | 2023.08.14 |