Mock
은 한글로 "모의, 가짜의"라는 뜻Mock
이라 한다.Mock
은 테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효용성을 높이기 위해 사용한다.WebApplicationContext
를 로드하며 내장된 서블릿 컨테이너가 아닌 Mock
서블릿을 제공한다.Mock
서블릿을 로드하여 구동하게 된다.@AutoConfigureMockMvc
어노테이션을 함께 사용하면 별다른 설정 없이 간편하게 MockMvc를 사용한 테스트를 진행할 수 있다.Mock
에도 종류가 있는데, 이를 테스트 더블(Test Double) 이라 한다.
⇒ Mock Object를 이용한 테스트만 행위 기반 테스트이고, 나머지는 전부 상태 기반의 테스트이다.
Mock
객체와 유사한 의미를 가지며 테스트 더블이 Mock
보다 상위 의미로 사용1. 더미 객체
2. 테스트 스텁
더미
스텁
페이크 객체
3. 페이크 객체
Mock
프레임 워크를 사용해야한다.4. 테스트 스파이
Mock
프레임워크에서 기본적으로 기능이 제공된다.5. Mock 객체
Mock
프레임워크가 정말 필요한지 확인합니다.Mock
을 사용하는 경우 테스트 케이스 유지에 복잡성이 더해지기 때문에 Mock
이 없는 의존성 적은 구조로 프로그래밍합니다.Mock
객체는 가짜 객체일 뿐이라 실제 객체로 작동을 했을 때 작동하지 않을 수 있습니다.Mock
객체를 만들어 주는 프레임워크이며, 사용시 아래의 장점이 있다.Mock
객체를 명시적으로 생성하지 않아도 된다.Mock
프레임워크가 존재하지면 현재 간편한 사용법으로 빠르게 확산되고 있으며 상태 기반 테스트를 지원하는 프레임워크이다.Mock
을 쉽게 만들고 Mock
의 행동을 정하는 stubbing, 정상적으로 작동하는지에 대한 verify 등 다양한 기능을 제공해주는 프레임워크이다.MockMvc
코드@SpringBootTest
@Transactional // 이 테스트를 수행하며 생긴 DB 변동사항은 반영되지 않는다.
@AutoConfigureMockMvc
public class AppTests {
@Autowired
private MockMvc mvc; // MockMvc == 호출기, 브라우저라고 생각하면 된다.
// 특정 요청을 발생시킴
@Test
@DisplayName("메인화면에서는 안녕이 나와야 한다.")
void t1() throws Exception {
// when (GET /)
ResultActions resultActions = mvc
.perform(get("/"))
.andDo(print()); // 콘솔에 출력됨
// then (안녕)
resultActions
.andExpect(status().is2xxSuccessful())
.andExpect(handler().handlerType(HomeController.class))
.andExpect(handler().methodName("main"))
.andExpect(content().string(containsString("안녕")));
// HomeController에 있는 main메서드에서 최종적으로 "안녕"이 들어있는지 검증
}
}
ResultActions
객체를 받으며,ResultActions
객체는 리턴 값을 검증하고 확인할 수 있는 andExcpect()
메소드를 제공get()
, post()
, put()
, delete()
중 여기서는 GET 요청)참고 자료
- Mock에 대한 개념, 설명, 프레임워크 소개
Mock - 인코덤, 생물정보 전문위키
[스프링부트 (9)] SpringBoot Test(2) - @SpringBootTest로 통합테스트 하기
[Mockito] Mock 객체 란?
Mock 객체란 무엇일까? 왜 써야될까?
테스트를 위한 Mock과 그 외의 Test Double
Mockito - Mockito란, Stubbing/Verification, Mock 객체 생성 방법과 동작 원리
[Spring Boot] Mockito (1) - Mock이란?, Mockito 소개
- MockMvc, MockBean 을 통해 테스트 하기
Spring Boot @MockBean을 이용한 단위 테스트
SpringBoot의 MockMvc를 사용하여 GET, POST 응답 테스트하기
스프링 부트의 Mock
[SpringBoot] Spring Boot MockMvc
정리글 감사합니다 잘읽고갑니다