MockMvc 사용해보기

큰모래·2023년 3월 30일
0
post-thumbnail

개념

스프링 프레임워크에서 제공하는 테스트 도구이다.
MockMVC를 사용하면 서버를 실제로 실행시키지 않아도 컨트롤러단을 테스트할 수 있다. MockMVC는 이를 위해 가상의 Request를 생성하고, 컨트롤러의 Response를 검증할 수 있도록 한다.


테스트 1

MemberController에 위와 같은 /member/testget 요청 시 "Hello test" 문자열을 리턴하는 showTest 메서드를 만들었다.


MockMvc를 필드 주입을 통해 객체를 주입받았다.
이제 주입받은 MockMvc 객체를 통해 내가 작성한 컨트롤러 메서드가 올바른지 확인해야 한다. 이는 perform 메서드를 통해 검증할 수 있다.
우선 url 요청 타입과 주소를 설정하여 가상의 http 요청을 보낸다. 그러면 이제 그 결과에 대한 검증을 andExpect 메서드를 통해 이루어진다.

  1. status().isOk()를 통해 HTTP 응답 코드가 200인지 검증합니다.
  2. content().string("Hello test")를 통해 응답 내용이 "Hello test"인지 검증합니다.
  3. andDo(print())은 요청과 응답 정보를 콘솔에 출력합니다.

위와 같이 요청과 응답 내용을 콘솔창에서 확인할 수 있습니다.


테스트 2

이번에는 좀 더 체계적으로 테스트했다. 회원가입을 하는 컨트롤러에 대한 설명은 따로 하지 않겠다. MockMvcperform 메서드에 이번엔 회원가입 post 요청 url을 넣었다. 그리고 스프링 시큐리티에 의해 csrf 토큰 값을 가지고 있어야 하므로 csrf 토큰도 생성해준다. 마지막으로 param 메서드를 통해 회원가입 폼에 넣을 usernamepassword를 생성해준다. 이렇게 perform을 통해 생성하면 ResultActions 객체를 반환한다.
ResultActions 객체의 andExpect를 통해 결과를 검증할 수 있는 것이다.

  1. handlerType 즉, 컨트롤러에 대한 검증을 진행
  2. handler.methodName 즉, 컨트롤러의 요청 메서드 이름 검증
  3. 요청에 대한 http 응답 코드 검증
  4. 마지막으로 db에 정상적으로 멤버 객체가 저장되었는지 확인한다.

테스트에는 @Transactional을 통해 테스트단에서 트랜잭션이 완료되면 롤백 처리되게 한다.


추가

perform 으로 요청할 시 요청 헤더의 content-type 및 요청 바디의 content 설정 또한 가능하다.


또한, andExpect를 통해 검증할때, 컨트롤러가 리턴하는 ViewRedirection에 대한 검증, 컨트롤러에서 저장한 Model의 정보 검증 등이 가능하다.


참고

멋사 백엔드 스쿨
https://scshim.tistory.com/321
https://katfun.tistory.com/195

profile
큰모래

0개의 댓글