저장소 클래스 내의 메서드 만 호출하는 서비스 클래스 내의 메서드에 대한 단위 테스트를 작성해야합니까?
저장소 클래스 (DAL)가 있습니다.
public class MyRepository : IMyRepository
{
public void Delete(int itemId)
{
// creates a concrete EF context class
// deletes the object by calling context.DeleteObject()
}
// other methods
}
또한 서비스 클래스 (BLL)가 있습니다.
public class MyService
{
private IMyRepository localRepository;
public MyService(IMyRepository instance)
{
this.localRepository = instance;
}
public void Delete(int itemId)
{
instance.Delete(itemId);
}
// other methods
}
MyRepository에 대한 단위 테스트를 작성하면 Entity Framework 컨텍스트를 조롱해야하기 때문에 구현하는 것보다 시간이 더 많이 걸립니다.
하지만 MyService에 대한 단위 테스트를 만드는 것은 저장소에만 호출하기 때문에 난센스가됩니다. 내가 확인할 수있는 것은 그것이 실제로 저장소 삭제 메소드를 호출했는지 확인하는 것입니다.
질문
이러한 쌍의 삭제 방법을 단원 테스트에 제안 하시겠습니까? 양자 모두? 하나? 없음? 그리고 당신은 무엇을 시험하겠습니까?
하지만 Service.Delete() 메소드를 테스트 할 경우 Repository.Delete() 메소드를 호출하는지 확인할 수 있습니다. 데이터 조작은 저장소에서 수행되므로 데이터를 확인할 수 없습니다. 기타 (미래) 복잡성은 테스트에 포함되지 않습니다. –
@ 로버트 그것은 완전히 정확하지 않습니다. 모의 IMyRepository 개체를 만들어야합니다. 일단 그렇게하면 서비스 레이어가 delete를 호출 할 때 mock에서 삭제가 호출되는지 확인할 수 있도록 mock을 설정할 수 있습니다. 따라서 Repository.Delete도 테스트하지 않고 Service.Delete 기능을 테스트하고 있습니다. – Joseph