JAVA, Kotlin
Mock / Mockito 란?
UDUD
2020. 1. 15. 12:05
반응형
Mock 이란 ?
- 단위 테스트를 진행할때 실제 객체를 만들어서 사용하게 되면 의존성이 높아져 간단한 구현이 아닌 복잡한 구현을 하게 되었을 때 어려움이 있음
- 이를 해결하기 위해 가짜 객체인 Mock을 사용해서 의존성을 끊고, 보다 간편하게 단위 테스트를 진행 할 수 있다.
Mockito 란?
- JAVA에서 Mock을 사용할 수 있도록 지원해주는 프레임워크
선언 방법
- 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); }
- 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 생성 방법
- 첫번째 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);
}
- 두번째 Mock ( MenuItemRepository )
private void mockMenuItemRepository() {
// Mock 으로 생성한 가짜 객체에, 값을 대입
List<MenuItem> menuItems = new ArrayList<>();
menuItems.add(new MenuItem("Kimchi"));
given(menuItemRepository.findAllByRestaurantId(1004L)).willReturn(menuItems);
}
반응형