JAVA, Kotlin

Mock / Mockito 란?

UDUD 2020. 1. 15. 12:05
반응형

Mock 이란 ?

  • 단위 테스트를 진행할때 실제 객체를 만들어서 사용하게 되면 의존성이 높아져 간단한 구현이 아닌 복잡한 구현을 하게 되었을 때 어려움이 있음
  • 이를 해결하기 위해 가짜 객체Mock을 사용해서 의존성을 끊고, 보다 간편하게 단위 테스트를 진행 할 수 있다.

Mockito 란?

  • JAVA에서 Mock을 사용할 수 있도록 지원해주는 프레임워크

선언 방법

  1. Mock을 사용하지 않고 Repository를 모두 가져와서 사용하는 경우
public class RestaurantServiceTest { 
        private RestaurantRepository restaurantRepository; 
        private RestaurantService restaurantService; 
        private MenuItemRepository menuItemRepository;

    @Before 
    public void setUp(){ 
        restaurantRepository = new RestaurantRepositoryImpl(); 
        restaurantService = new RestaurantService(restaurantRepository); 
        menuItemRepository = new MenuItemRepositoryImpl(); 

        restaurantService = new RestaurantService(restaurantRepository, menuItemRepository); }
  1. Mock을 사용해서 가짜 객체를 만든 경우
import static org.mockito.BDDMockito.given;

public class RestaurantServiceTest { 
    private RestaurantService restaurantService; 
    // 첫번째 Mock 
    @Mock 
    private RestaurantRepository restaurantRepository; 
    // 두번째 Mock 
    @Mock 
    private MenuItemRepository menuItemRepository;

    @Before 
    public void setUp() { 
        // Mock 연동 및 초기화 
        MockitoAnnotations.initMocks(this); 
        mockRestaurantRepository(); 
        mockMenuItemRepository(); 

        restaurantService = new RestaurantService(restaurantRepository, menuItemRepository); }

Mock 생성 방법

  1. 첫번째 Mock ( RestaurantRepository )
private void mockRestaurantRepository() { 
    // Mock 으로 생성한 가짜 객체에, 값을 대입 
    List<Restaurant> restaurants = new ArrayList<>(); 
    Restaurant restaurant = new Restaurant(1004L, "Bob zip", "Seoul"); 
    restaurants.add(restaurant);

    given(restaurantRepository.findAll()).willReturn(restaurants);
    given(restaurantRepository.findById(1004L)).willReturn(restaurant); 
}
  1. 두번째 Mock ( MenuItemRepository )
private void mockMenuItemRepository() { 
    // Mock 으로 생성한 가짜 객체에, 값을 대입 
    List<MenuItem> menuItems = new ArrayList<>(); 
    menuItems.add(new MenuItem("Kimchi"));

    given(menuItemRepository.findAllByRestaurantId(1004L)).willReturn(menuItems); 
}
반응형