Junit - MockMvc

Seongjin Jo·2023년 1월 1일
0

Junit

목록 보기
1/1

✔ 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("뷰이름"));

0개의 댓글