如何使用Unity处理IDisposable存储库?

gog*_*gog 6 c# unit-testing

我有一份工作,我有一个IDisposable DbContext.我想在没有进入数据库的情况下对这项工作进行单元测试.我有什么选择呢?

我正在使用微软的默认Fakes程序集.

我的工作:

public void Work()
{
    do
    {   
        //code here                
        using (var repository = new Repository<User>())
        {
            repository.Save(user);
        }

    } while (true);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试测试并且在测试的这一部分中它失败了,因为它实际上创建了一个Repository类的新实例.

我的测试方法:

using (ShimsContext.Create())
{
    Data.Repository.Fakes.ShimRepository<Domain.Fakes.ShimUser>.Constructor = (a) => { };

    Data.Repository.Fakes.ShimRepository<Domain.Fakes.ShimUser>.AllInstances.SaveT0 = (a, b) =>
    {
    };

   var service = GetService();
    service.Work(); //Throws exception
}
Run Code Online (Sandbox Code Playgroud)

我该如何伪造这种Save方法?

dev*_*tal 7

你在这里违反了DIP,使得对你的服务进行单元测试比应该更加困难.您还应该避免使用通用存储库并使用角色接口.

相反,在您的存储库服务中注入一个抽象,例如IUsersRepository,它定义了您的Save方法.然后在您的服务单元测试中,您可以简单地使用存根实现IUsersRepository.