[SpringBoot] Spring Boot MockMvc

지수·2021년 10월 8일
1

플레이데이터

목록 보기
45/50
post-thumbnail

1. MockMvc란?

MockMvc는 웹 어플리케이션을 서버에 배포하지 않고도 Spring MVC의 동작을 재현하여 테스트 할 수 있는 클래스를 의미한다.
이는 실제 객체와 비슷하지만 테스트에 필요한 기능만 가지고 있는 가짜 객체를 만들어 사용하는 방법이다.




2. MockMvc 설정

Eclipse에서 Spring Starter Project를 만들면, 기본 라이브러리로 spring-boot-starter-test가 포함된다.
해당 설정이 되어있지 않다면, pom.xml에 아래 내용을 추가하면 된다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

설정이 완료되면 아래 이미지처럼
src/test/java 디렉토리 내부 프로젝트명 패키지 하단에 Test 파일이 생긴 것을 확인할 수 있다.




3. MockMvc를 통한 JUnit Test

1) 테스트 할 Controller와 MockMvc 주입


ApplicationTests 클래스 하단에 테스트 할 Controller와 MockMvc를 선언,
@Autowired를 통해 자동으로 의존성을 주입한다.

2) MockMvc 초기화 설정


MockMvc 객체를 초기화하고 테스트를 진행하도록 MockMvc를 초기화하는 메서드 작성,
@BeforeEach 애노테이션을 통해 매 테스트 이전에 해당 메소드가 실행되도록 설정한다.

3) MockMvc를 통한 @Test

> http 메소드별

GET : mock.perform(get("/test")).andExpect(status().isOk()).andDo(print());
POST : mock.perform(post("/test")).andExpect(status().isOk()).andDo(print());
PUT : mock.perform(put("/test")).andExpect(status().isOk()).andDo(print());
DELETE : mock.perform(delete("/test")).andExpect(status().isOk()).andDo(print());

> parameter 유무별

parameter가 없을 때 : mock.perform(get("/test")).andExpect(status().isOk()).andDo(print());
parameter가 있을 때 : mock.perform(get("/test").param("name","jisu")).andExpect(status().isOk()).andDo(print());
parameter가 여러 개 일 때 : .params(MultiValueMap<String, String> data)

MultiValueMap<String, String> data = new LinkedMultiValueMap<>();
    data.add("name", "jisu");
    data.add("age", "25");
    data.add("address", "Incheon");
    data.add("githubId", "geesuee");
mock.perform(get("/test").params(data)).andExpect(status().isOk()).andDo(print());

> params로 보낼 때, body로 보낼 때

@RequestParam :

MultiValueMap<String, String> data = new LinkedMultiValueMap<>();
    data.add("name", "jisu");
    data.add("age", "25");
    data.add("address", "Incheon");
    data.add("githubId", "geesuee");
mock.perform(post("/test").params(data)).andExpect(status().isOk()).andDo(print());

@RequestBody :

mock.perform(post("/test")
   .content("{\"name\":\"jisu\", \"age\":\"25\", \"address\":\"Incheon\", \"githubId\":\"geesuee\"}")
   .contentType(MediaType.APPLICATION_JSON)
   .accept(MediaType.APPLICATION_JSON))
   .andExpect(status().isOk())
   .andDo(print());



4. MockMvcRequestBuilders 주요 메서드

출처: KTKO 개발 블로그와 여행 일기




5. 실행 결과 검증(ResultMatcher)

andExpect() 메서드에 parameter로 ResultMatcher를 지정하여, 실행 결과의 상태를 검증한다.
출처: KTKO 개발 블로그와 여행 일기




6. 실행 결과 출력(ResultHandler)

andDo() 메서드에 parameter로 ResultHandler를 지정하여, 실행 결과값을 출력한다.
출처: KTKO 개발 블로그와 여행 일기

profile
사부작 사부작

0개의 댓글