티스토리 뷰

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); 
}
반응형

'JAVA, Kotlin' 카테고리의 다른 글

@Resource, @Autowired, @Inject 차이  (0) 2021.11.01
람다 Lambda 란?  (0) 2021.06.23
컴파일러 vs 인터프리터  (0) 2021.03.04
== 와 equals 차이?  (0) 2021.03.03
JPA 네이티브 쿼리 - param이 많을 때, 복합키일때  (0) 2020.11.16
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함