[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