✔ MockMvc 객체
서블릿 컨테이너의 구동 없이, 시뮬레이션된 MVC 환경에 모의 HTTP서블릿 요청을 전송하는 기능을 제공하는 유틸리티 클래스이다. ControllerTest에 유용하다.
MockMvc 사용법
mockMvc.perform(
get("test?query=food") //해당 url로 요청을 한다.
.contentType(MediaType.APPLICATION_JSON) // Json 타입으로 지정
.content(jjson) // jjson으로 내용 등록
.andExpect(status().isOk()) // 응답 status를 ok로 테스트
.andDo(print()); // 응답값 print
)
1.MockMvc를 생성한다.
2.MockMvc에게 요청에 대한 정보를 입력한다.
3.요청에 대한 응답값을 Expect를 이용하여 테스트한다.
4.Expect가 모두 통과하면 테스트 통과
5.Expect가 1개라도 실패하면 테스트 실패
MockMvc가 제공하는 메서드
1.perform()
- 브라우저에서 서버에 URL요청을 하듯 컨트롤러를 실행시킨다. RequestBuilder 객체를 인자로 받고 MockMvcRequestBuilders의 정적 메소드를 이용해서 생성한다. MvckMvcRequestBuilders의 메소드들은 GET, POST, PUT, DELETE 요청 방식과 매핑되는 get(), post(), put(), delete() 메소드를 제공한다. 이 메소드들은 MockHttpServletRequestBuilder 객체를 리턴하고, 이를 통해 HTTP 요청 관련 정보(파라미터, 헤더, 쿠키)를 설정할 수 있다.
2.andExpect()
- perform() 메소드를 이용하여 요청을 전송하면, 그 결과로 ResultActions 객체를 리턴하는데 이 객체는 응답 결과를 검증할 수 있는 andExpect() 메소드를 제공한다.
- andExpect()가 요구하는 ResultMatcher는 MockMvcResultMatchers에 정의된 정적 메소드를 통해 생성할 수 있다.
- MockMvcResultMatcher 객체는 컨트롤러가 어떤 결과를 전송했는지, 서버의 응답 결과를 검증한다.
3.MockMvcResultMatcher 객체가 제공하는메소드
- isOk() : 응답 상태 코드가 정상적인 처리(200)인지 확인
- isNotFount() : 응답 상태 코드가 404 Not Found인지 확인
- isMethodNotAllowed() : 응답 상태 코드가 메소드 불일치(405)인지 확인
- isInternalServerError() : 응답 상태 코드가 예외발생(500)인지 확인
- is(int status) :몇 번 응답 상태 코드가 설정되었는지 확인 ex) is(200), is(404)
4.기타 메소드
- andDo() : print, log를 사용할 수 있는 메소드
- print() : 실행결과를 지정해준 대상으로 출력, default = System.out
- log() : 실행결과를 디버깅 레벨로 출력, 레벨은 org.springframework.test.web.servlet.result
요청 메소드
- param / params : 쿼리 스트링 설정
- cookie : 쿠키 설정
- requestAttr : 요청 스코프 객체 설정
- sessionAttr : 세션 스코프 객체 설정
- content : 요청 본문 설정
- header / headers : 요청 헤더 설정
- contentType : 본문 타입 설정
예시)
@Test
public void testController() throws Exception{
mockMvc.perforem(get("test"))
.param("query", "부대찌개")
.cookie("쿠키 값")
.header("헤더 값:)
.contentType(MediaType.APPLICATION.JSON)
.content("json으로");
}
검증 메소드
- status : 상태 코드 검증
- header : 응답 header 검증
- content : 응답 본문 검증
- cookie : 쿠키 상태 검증
- view : 컨트롤러가 반환한 뷰 이름 검증
- redirectedUrl(Pattern) : 리다이렉트 대상의 경로 검증
- model : 스프링 MVC 모델 상태 검증
- request : 세션 스코프, 비동기 처리, 요청 스코프 상태 검증
- forwardedUrl : 이동대상의 경로 검증
예시)
@Test
public void testController() throws Exception{
mockMvc.perform(get("test"))
.param("query", "부대찌개")
.cooke("쿠키 값")
.header("헤더 값:)
.contentType(MediaType.APPLICATION.JSON)
.content("json으로")
.andExpect(status().isOk()) // 여기부터 검증
.andExpect(content().string("expect json값"))
.andExpect(view().string("뷰이름"));