モックと依存性注入に関する質問やブログをざっと見てみました。結論として、クライアントが消費するインターフェイスをモックするだけで済みます。ここで単純なユースケースをテストすることを楽しみにしています。
その契約
public Interface IApplicationService
{
bool DeleteApplication(int id);
ApplicationDto AddApplication(ApplicationDto application);
IEnumerable<ApplicationDto> GetApplications();
}
実装(私はモックするつもりです)
public Class ApplicationService:IApplicationService
{
private EntityFrameworkRepo repo;
public ApplicationService()
{
repo = new EntityFrameworkRepo();
}
public ApplicationDto Add(ApplicationDto dto)
{
//add to dbcontext and commit
}
}
モッキングコード
[Test(Description = "Test If can successfully add application")]
public void CanAddApplication()
{
//create a mock application service
var applicationService = new Mock<IApplicationService>();
//create a mock Application Service to be used by business logic
var applicationDto = new Mock<ApplicationDto>();
//How do i set this up
applicationService.Setup(x => x.GetApplications()).Returns(IEnumerable<applicationDto.Object>);
}
そして、ビジネスロジックをモックするのではなく、テストする必要があると確信しています。それで、私をテストするために正確に何をしなければなりませんがApplicationService
、エンティティフレームワークを締め出します。
ところでApplicationService
、それは NInject でコンストラクター注入を使用します。これをモックすると、NInject.MockingKernel
依存関係チェーンがセットアップされますか?