加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:16:53 所属栏目:百科 来源:网络整理
导读:我有一份工作,我有一个IDisposable DbContext.我想在没有进入数据库的情况下对这项工作进行单元测试.我有什么选择呢? 我正在使用微软的默认Fakes程序集. 我的工作: public void Work(){ do { //code here using (var repository = new RepositoryUser()) {
我有一份工作,我有一个IDisposable DbContext.我想在没有进入数据库的情况下对这项工作进行单元测试.我有什么选择呢?

我正在使用微软的默认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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读