의 내가 중 하나가 기본적으로 추가 처리의 단지 작은 비트와 다른 방법에 대한 래퍼입니다 두 가지 방법을 가지고 있다고 가정 해 봅시다 :이 경우 부분 조롱에 어떤 문제가 있습니까?
public class ItemRepositoryImpl implements ItemRepository {
...
@Override
public void delete(UUID itemID) {
Item item = findOne(itemID);
delete(item);
}
@Override
public void delete(Item item) {
// Do a bunch of stuff that needs a lot of tests run on it, like
// deleting from multiple data sources etc
...
}
}
삭제 (UUID)에 대한 단위 테스트를 작성에 어떤 문제가 메서드를 사용하여 ItemRepositoryImpl을 부분적으로 숨기고 삭제 (UUID)가 결국 delete (Item)을 호출하는지 확인합니다. 이 작업을 수행했다면 각 삭제 방법에 대해 여러 개의 중복 테스트를 작성하지 않아도됩니다. 기본적으로 만 사용되어야한다는, 그러나, Mockito 문서 강하게 부분 조롱 이러한 유형의 사용을 권장하지
ItemRepository spyRepo = spy(repository); // Create the spy
when(spyRepo.findOne(itemID)).thenReturn(item); // Stub the findOne method
doNothing().when(spyRepo).delete(item); // Stub the delete(Item) method
spyRepo.delete(itemID); // Call the method under test
// Verify that the delete(Item) method was called
verify(spyRepo).delete(item);
: Mockito에서
는,이 같은 스파이와 같은 테스트를 구현할 수 중간 레거시 코드 및 제 3 자 API 더 나은 해결책은 무엇일까요?
정말 중복 테스트가 많이 있습니까? 'delete (UUID) '에 대한 두 개의 테스트 - 항목이있는 항목과 항목이 하나도없는 항목을 상상합니다. 호출의'delete (Item)'부분에서의 상세한 처리는'delete (Item)'에 대한 테스트들 사이에서 테스트됩니다. –