我的工作中有一个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/