繁体   English   中英

实体框架 6 和单元测试

[英]Entity Framework 6 and Unit Test

我一直在寻找解决方案,但找不到答案(例如此处此处。)

public class ItemsRepository {
    public ItemDto Get(int id) {
        using (var db = new ItemContext()) {
            return db.Items.FirstOrDefault(i => i.Id == id)
                .ToDto();
        }
    }
}

我曾经通过一直到数据库来测试这段代码。 我知道这不是一个好习惯,因为在这种情况下的单元测试也测试到数据库的连接。

理想情况下,我想构建一个内存数据库并为其播种。 在这种情况下我该怎么做? 如何伪造 ItemContext 以使用内存列表?

请注意,我不想将 Context 作为构造函数公开,因为用户必须知道数据是如何存储的。

你不能伪造ItemContext因为new关键字总是创建对象的新实例。 理想情况下,您应该通过依赖注入来注入您的上下文。 像这样的东西:

public class ItemsRepository {
    public ItemDto Get(int id) {
       return _itemContextService.Items.FirstOrDefault(i => i.Id == id)
                .ToDto();            
    }
}

在单元测试中_itemContextService应该被注入, _itemContextService.Items应该被配置为模拟数据。 您应该进行单元测试的所有逻辑是:

FirstOrDefault(i => i.Id == id).ToDto();            

这只是Get(int id)方法所做的。 与数据库的连接超出了单元测试此方法的范围。

无论如何,如果您不能使用某些 DI 容器或以某种方式注入ItemContext那么您可以在单元测试项目中模拟您的连接字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM