1.의의
- 비지니스 로직을 구현할 때 오류 없이 작동하는지 단위 테스트를 실시한다.
- 매번 코드를 작성하고 잘 작동하는지 애플리케이션을 실행하고 브라우저를 통해 서버로 요청한 후 결과 페이지가 생각대로 잘 작동하는지 확인 해야 한다.
- 그래서 이런 과정을 줄이기 위해 단위 테스를 한다.
- HttpServletRequest와 HttpServletRespose의 내용등을 검증해야 한는데 이름 구현하는 건 쉽지 않다.
- 이런 단위테스트를 하기 위해 MockMvc라는 객체를 이용해 수행한다.
2.MockMvc 객체
1)의의
- 우리는 휴대폰 가게 앞에서 가짜 핸드폰 Mockup을 보곤 한다. 테스팅에서 Mock도 비슷한 모습이다.
- MockMvc 는 테스를 위해 브라우저나 WAS의 동작을 똑같이 처리해줄 수 있는 환경을 의미하고,브라우저에서 발생하는 요청을 가상으로 만들고 컨트롤러가 응답하는 내용을 기반으로 검증을 수행한다.
2)동작
- perform: 가상의 request를 처리한다.
- 요청은 MockHttpServletRequestBuilder를 통해서 생성한다.
- expect: 가상의 response에 대해 검증한다.
- 검증의 항복은 ResultMathcers를 반환하는 handler(),status(),model(),view()에 따른다.
- do:테스트 과정에서 콘솔 출력등 직접 처리할 일을 작성한다.
- 실제 동작은 ResultHandler를 사용한다.
3)MockBean
- spring-boot-test 패키지는 Mockito를 포함하고 있기 때문에 기존에 사용하던 방식대로 Mock 객체를 생성해서 테스트하는 방법도 있지만, spring-boot-test에서는 새로운 방법도 제공하고 있다.
3.테스트를 위한 기본 구성
1)@ BeforeEach
- MockMvc는 매번 테스트가 실행될때 마다 초기화 해주기위해서 @ BeforeEach초기화 주어야 한다.
2)요청 만들기
- 요청은 MockMvcRequestBuilders의 static메서드인 get,post,put,delete,fileupload 등을 이용해서 MockMvcRequestBuilder 객체를 생성한다.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ArticleServiceImpl.class)
public class ArticleServiceImplTest {
@MockBean
private RestTemplate restTemplate;
@MockBean
private ArticleDao articleDao;
@Autowired
- MockHttpServletRequestBuilder는 ServletRequest를 구성하기 위해 다양한 메서드를 제공한다.

2)검증하기
- perform의 결과로 ResultActions가 반환 되는데 이 객체의 andExpect메서드에 ResultMatcher를 넘겨줘서 검증한다.
- ResultMatcher는 아래의 MockMvcResultMachers가 가지는 static메서드를 통해서 얻는다.

3)실행하기