带有 Autofac 单元测试 DataContext 的实体框架 6

Posted

技术标签:

【中文标题】带有 Autofac 单元测试 DataContext 的实体框架 6【英文标题】:Entity framework 6 with Autofac unit testing DataContext 【发布时间】:2016-12-15 00:26:01 【问题描述】:

我正在使用带有 Autofac 的 Entity Framework 6 进行依赖注入。

这是我的数据库上下文包装代码:

public interface IOliveDataContext

    OlivesHealthEntities Context  get; 

这是它的实现:

public class OliveDataContext : IOliveDataContext

    public OlivesHealthEntities Context => new OlivesHealthEntities();

我想知道是否有办法用内存数据库连接包装默认上下文以进行单元测试,或者我必须连接到其他数据库才能进行测试。

谁能帮帮我?

P/s : 我读过一些关于使用 EF6 进行单元测试的 tuts,他们总是为此编写上下文接口,这与我当前的应用程序实现不同。

【问题讨论】:

您可能会发现mock the DbContext 更容易,这将允许您自定义行为和断言条件。如果你想进行集成测试,那么你可以set up your database in a controlled manner 让你测试你的映射逻辑。 【参考方案1】:

如果您谈论的是内存数据库实例,则有 Effort 用于此目的。它使用内存上的实体框架引擎模拟真实数据库。 但它有局限性,它不能模拟存储过程、视图和触发器。

【讨论】:

以上是关于带有 Autofac 单元测试 DataContext 的实体框架 6的主要内容,如果未能解决你的问题,请参考以下文章

Autofac 通过 PreserveExistingDefaults 解决单元测试 Fake 对象被覆盖

AutoFac使用方法总结:Part I

为啥第三方包 Autofac 带有两个包?

带有 ValidationAttribute 的 Autofac 属性注入

Autofac 集成测试 在 ConfigureContainer 之后进行 Mock 注入

Autofac IContainer 测试