我的工作中有一个IDisposable DbContext。我想在不访问数据库的情况下对这项工作进行单元测试。我必须执行哪些选择?

我使用的是Microsoft的默认Fakes程序集。

我的工作:

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

    } while (true);
}

我正在尝试测试,并且在测试的这一部分中失败了,因为它实际上创建了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
}

如何伪造此Save方法?

最佳答案

您在这里违反了DIP,这使得对服务进行单元测试的难度远远超出了应有的程度。您还应该避免使用通用存储库,而应使用role interfaces

取而代之的是,将抽象注入(inject)到您的存储库服务中,例如IUsersRepository,它定义了Save方法。然后,在对该服务的单元测试中,您可以简单地使用IUsersRepository的 stub 实现。

关于c# - 如何使用Unity处理IDisposable存储库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33150168/

10-11 22:17
查看更多