InMemoryDatabase伪造System.Data.Entity.Database属性

时间:2017-10-12 08:26:47

标签: c# .net entity-framework unit-testing

在我们的应用程序中,过去没有测试 目前我正在重构我们的代码,以便我们可以编写验收和单元测试。要做的是,我需要对数据库进行抽象。我们使用Entity Framework 6作为我们的ORM。

我创建了一个实现接口的InMemoryDb类,也是EF-Context实现的。

EF - DbContext类提供了Database类型System.Data.Entity.Database的属性。

不幸的是,在我们的代码中,这个属性被多次使用,例如:

Connection = (SqlConnection)dbBase.Entities.Database.Connection;

如果验收测试Entities属于InMemoryDb类型。 问题是,在验收测试中,Database属性为 null ,我不知道如何正确设置属性。

我试图在构造函数中初始化它,但它不起作用:

public class InMemoryDb : IEfContext, IInMemoryDb
{
    public InMemoryDb()
    {
        this.per_person = new TestDbSet<per_person>();
        this.Database = new Database(null);
    }
    public void Dispose()
    {
        throw new System.NotImplementedException();
    }

    public Task<int> SaveChangesAsync()
    {
        throw new System.NotImplementedException();
    }

    public Database Database { get; }

    public DbSet<per_person> per_person { get; set; }

    [...]
}
  • 设置此属性的正确方法是什么,同时确保不使用真实数据库?

提前致谢

1 个答案:

答案 0 :(得分:0)

我希望它会对你有所帮助。 只需查看 Effort.EF6 即可。该lib将在NMemory的帮助下设置您的整个应用程序数据(baseI上下文在内存中)。 我已经在我们的应用程序中使用它,它就像一个魅力,非常容易使用。

您完全与SQL Server中的SQL Server或数据库等外部物理依赖关系脱离。