
MockMvc
- 스프링에서 제공하는 테스트 도구 중 하나로, 컨트롤러의 테스트를 지원하는 모듈이다
- 서버를 띄우지 않고도 컨트롤러의 동작을 테스트할 수 있다
- 브라우저에서 요청을 보낼 떄와 동일한 방식으로 HTTP 요청을 생성할 수 있으며, 이를통해 컨트롤러의 응답 결과를 검증할 수 있다
- 컨트롤러에서 사용되는 다른 빈들을 Mock객체로 대체하여 테스트를 진행할 수 있다
- 가장 중요한 역할을 하는 메서드는 perform()이다. 메서드의 선언부는 테스트 대상에 HTTP 메시지를 요청(RequestBulder)하고 실행 결과를 ResultActions에서 확인할 수 있다
요청 설정 메소드
- param / params : 쿼리 스트링 설정
- cookie : 쿠키 설정
- requestAttr : 요청 스코프 객체 설정
- sessionAtr : 세션 스코프 객체 설정
- content : 요청 본문 설정
- header / headers : 요청 헤더 설정
- contentType : 본문 타입 설정
검증 메소드
- andExpect : 비교할 검증 코드 입력
(.andExpect(status().isOk())
- status : 상태 코드 검증
- header : 응답 header 검증
- content : 응답 본문 검증
- cookie : 쿠키 상태 검증
- view : 컨트롤러가 반환한 뷰 이름 검증
- redirectedUrl(Pattern) : 리다이렉트 대상의 경로 검증
- model : 스프링 MVC 모델 상태 검증
- request : 세션 스코프, 비동기 처리, 요청 스코프 상태 검증
- forwardedUrl : 이동대상의 경로 검증
기타 메소드
- andDo() : print, log를 사용할 수 있는 메소드
- print() : 실행결과를 지정해준 대상으로 출력,
default = System.out
- log() : 실행결과를 디버깅 레벨로 출력, 레벨은
org.springframework.test.web.servlet.result
속성 및 사용법
- 응답(일부만 여러개 더 있음)
- isOk() : 상태 코드가 200인지 확인
- isNotFount() : 404인지 확인
- isMethodNotAllowed() : 405인지 확인
- isInternalServerError() : 500인지 확인
- is(int status) : 임의로 지정한 상태 코드인지 확인
- 모델
.andExpect(model().atrribute("userId", "user"))
attributeExists(String key)
: key에 해당하는 데이터가 model에 있는지 검증
attribute(String key, Object value1)
: key에 해당하는 value가 입력해준 "value1"과 일치한지 확인
- 뷰 이름
.andExpect(view().name("home"));
name(String viewName)
: 응답된 뷰 이름이 viewName과 일치한지 확인
- 리다이렉트
.andExpect(redirectedUrl("/user?name=user1"));