[Basic] Mock Object
2020. 7. 23. 15:52ㆍ개발/[Basic]
Mock Object 란?
Mock Object란 "가짜 객체" 라고 부르기도 한다.
객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법이다.
Mock Object 쓰이는 경우
- 테스트 작성을 위한 환경 구축이 어려운 경우
- 테스트가 특정 경우나 순간에 의존적인 경우
- 테스트 시간이 오래 걸리는 경우
- 개인 PC의 성능이나 서버의 성능문제로 오래 걸릴수 있는 경우 시간을 단축하기 위해 사용한다.
Mock 객체를 쓰지 않은 경우
의존 관계 : RestaurantService→ RestaurantRepository & MenuItemRepository
@SpyBean(RestaurantService.class)
private RestaurantService restaurantService;
@SpyBean(RestaurantRepositoryImpl.class)
private RestaurantRepository restaurantRepository;
@SpyBean(MenuItemRepositoryImpl.class)
private MenuItemRepository menuItemRepository;
@Test
public void list() throws Exception {
mvc.perform(get("/restaurant"))
.andExpect(status().isOk())
.andExpect(content().string(
containsString("\"id\":1004")
))
.andExpect(content().string(
containsString("\"name\":\"Bob zip\"")
));
}
Mock 객체를 사용하는 경우
@MockBean
private RestaurantService restaurantService;
@Test
public void list() throws Exception {
ArrayList<Restaurant> restaurants = new ArrayList<>();
restaurants.add(new Restaurant(1004L,"Bob zip","seoul"));
given(restaurantService.getRestaurants()).willReturn(restaurants);
mvc.perform(get("/restaurant"))
.andExpect(status().isOk())
.andExpect(content().string(
containsString("\"id\":1004")
))
.andExpect(content().string(
containsString("\"name\":\"Bob zip\"")
));
}
이렇게 해줌으로써 가짜 객체를 씀으로써
실제 서비스 상태에 상관 없이 Controller 부분에서만 신경을 쓸 수 있기 때문에 Controller부분에만
집중을 할 수 있다.
'개발 > [Basic]' 카테고리의 다른 글
[Gradle] Gradle이란 무엇일까? (0) | 2021.05.03 |
---|---|
[Basic] AWS EC2 만들기. (0) | 2020.10.23 |
[Basic] 개발 Know 로드맵 (0) | 2020.07.18 |
[Basic] OCP 개방 폐쇄 원칙 (0) | 2020.07.06 |
[Basic] 테스팅 프레임워크 JUnit (0) | 2020.06.29 |