Loading...
Spring Framework Reference Documentation 7.0.2의 Performing Requests의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 섹션은 MockMvc를 단독으로 사용하여 요청을 수행하고 응답을 검증하는 방법을 보여줍니다.
WebTestClient를 통해 MockMvc를 사용하는 경우 대신
Writing Tests에 대한 해당 섹션을 참조하십시오.
다음 예시와 같이, 임의의 HTTP 메서드를 사용하는 요청을 수행하려면:
1// static import of MockMvcRequestBuilders.* 2 3mockMvc.perform(post("/hotels/{id}", 42).accept(MediaType.APPLICATION_JSON));
1import org.springframework.test.web.servlet.post 2 3mockMvc.post("/hotels/{id}", 42) { 4 accept = MediaType.APPLICATION_JSON 5}
또한 실제 multipart 요청 파싱 없이 내부적으로
MockMultipartHttpServletRequest를 사용하는 파일 업로드 요청도 수행할 수 있습니다.
대신, 다음 예시와 비슷하게 설정해야 합니다:
1mockMvc.perform(multipart("/doc").file("a1", "ABC".getBytes("UTF-8")));
1import org.springframework.test.web.servlet.multipart 2 3mockMvc.multipart("/doc") { 4 file("a1", "ABC".toByteArray(charset("UTF8"))) 5}
다음 예시와 같이 URI 템플릿 스타일로 쿼리 매개변수를 지정할 수 있습니다:
1mockMvc.perform(get("/hotels?thing={thing}", "somewhere"));
1mockMvc.get("/hotels?thing={thing}", "somewhere")
또한 다음 예시와 같이 쿼리 또는 폼 매개변수를 나타내는 Servlet 요청 매개변수를 추가할 수도 있습니다:
1mockMvc.perform(get("/hotels").param("thing", "somewhere"));
1import org.springframework.test.web.servlet.get 2 3mockMvc.get("/hotels") { 4 param("thing", "somewhere") 5}
애플리케이션 코드가 Servlet 요청 매개변수에 의존하고 쿼리 문자열을 명시적으로 확인하지 않는 경우(대부분의 경우 그렇습니다), 어떤 옵션을 사용하든 상관없습니다.
그러나 URI 템플릿로 제공된 쿼리 매개변수는 디코딩되는 반면,
param(…) 메서드를 통해 제공된 요청 매개변수는 이미 디코딩된 것으로
간주된다는 점을 명심해야 합니다.
대부분의 경우, 요청 URI에서 컨텍스트 경로와 Servlet 경로를 생략하는 것이 좋습니다.
전체 요청 URI로 테스트해야 하는 경우, 다음 예시와 같이 요청 매핑이 동작하도록
contextPath와 servletPath를 적절히 설정해야 합니다:
1mockMvc.perform(get("/app/main/hotels/{id}").contextPath("/app").servletPath("/main"));
1import org.springframework.test.web.servlet.get 2 3mockMvc.get("/app/main/hotels/{id}") { 4 contextPath = "/app" 5 servletPath = "/main" 6}
앞의 예시에서, 수행되는 모든 요청마다 contextPath와
servletPath를 설정하는 것은 번거롭습니다. 대신, 다음 예시와 같이 기본 요청
프로퍼티를 설정할 수 있습니다:
1class MyWebTests { 2 3 MockMvc mockMvc; 4 5 @BeforeEach 6 void setup() { 7 mockMvc = standaloneSetup(new AccountController()) 8 .defaultRequest(get("/") 9 .contextPath("/app").servletPath("/main") 10 .accept(MediaType.APPLICATION_JSON)).build(); 11 } 12}
1class MyWebTests { 2 3 lateinit var mockMvc: MockMvc 4 5 @BeforeEach 6 fun setup() { 7 mockMvc = standaloneSetup(AccountController()) 8 .defaultRequest<StandaloneMockMvcBuilder>(get("/") 9 .contextPath("/app").servletPath("/main") 10 .accept(MediaType.APPLICATION_JSON)).build() 11 } 12}
앞에서 언급한 프로퍼티는 MockMvc 인스턴스를 통해 수행되는 모든 요청에 영향을
줍니다. 동일한 프로퍼티가 특정 요청에 대해서도 지정된 경우, 기본값을
오버라이드합니다.
따라서 기본 요청에서 HTTP 메서드와 URI는 중요하지 않습니다. 각 요청마다 반드시 지정해야 하기 때문입니다.
Setup Features
Defining Expectations