스프링 프레임워크에서 제공하는 테스트 도구이다.
MockMVC를 사용하면 서버를 실제로 실행시키지 않아도 컨트롤러단을 테스트할 수 있다. MockMVC는 이를 위해 가상의 Request를 생성하고, 컨트롤러의 Response를 검증할 수 있도록 한다.
MemberController
에 위와 같은 /member/test
로 get
요청 시 "Hello test" 문자열을 리턴하는 showTest
메서드를 만들었다.
MockMvc
를 필드 주입을 통해 객체를 주입받았다.
이제 주입받은 MockMvc
객체를 통해 내가 작성한 컨트롤러 메서드가 올바른지 확인해야 한다. 이는 perform
메서드를 통해 검증할 수 있다.
우선 url
요청 타입과 주소를 설정하여 가상의 http
요청을 보낸다. 그러면 이제 그 결과에 대한 검증을 andExpect
메서드를 통해 이루어진다.
status().isOk()
를 통해 HTTP 응답 코드가 200인지 검증합니다.content().string("Hello test")
를 통해 응답 내용이 "Hello test"인지 검증합니다.andDo(print())
은 요청과 응답 정보를 콘솔에 출력합니다.위와 같이 요청과 응답 내용을 콘솔창에서 확인할 수 있습니다.
이번에는 좀 더 체계적으로 테스트했다. 회원가입을 하는 컨트롤러에 대한 설명은 따로 하지 않겠다. MockMvc
의 perform
메서드에 이번엔 회원가입 post
요청 url을 넣었다. 그리고 스프링 시큐리티에 의해 csrf 토큰 값을 가지고 있어야 하므로 csrf 토큰도 생성해준다. 마지막으로 param
메서드를 통해 회원가입 폼에 넣을 username
과 password
를 생성해준다. 이렇게 perform
을 통해 생성하면 ResultActions
객체를 반환한다.
이 ResultActions
객체의 andExpect
를 통해 결과를 검증할 수 있는 것이다.
handlerType
즉, 컨트롤러에 대한 검증을 진행handler.methodName
즉, 컨트롤러의 요청 메서드 이름 검증http
응답 코드 검증테스트에는 @Transactional
을 통해 테스트단에서 트랜잭션이 완료되면 롤백 처리되게 한다.
perform
으로 요청할 시 요청 헤더의 content-type
및 요청 바디의 content
설정 또한 가능하다.
또한, andExpect
를 통해 검증할때, 컨트롤러가 리턴하는 View
와 Redirection
에 대한 검증, 컨트롤러에서 저장한 Model
의 정보 검증 등이 가능하다.
멋사 백엔드 스쿨
https://scshim.tistory.com/321
https://katfun.tistory.com/195