首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Effort.EF6测试紧急加载场景

用Effort.EF6测试紧急加载场景
EN

Stack Overflow用户
提问于 2017-10-20 13:55:29
回答 1查看 964关注 0票数 4

我们正在使用Effort.EF6为一个ASP.NET Web 2服务构建一个测试套件,它使用内存中的数据库,而且在大多数情况下,这是一个很好的体验。

但是,由于与这个问题无关的原因,我们不得不关闭EF6中的延迟加载(通过在db上下文的构造函数中运行Configuration.LazyLoadingEnabled = false; ),这意味着如果我们忘记在某个地方使用.Include(),然后使用它,我们就得到了NullReferenceExceptions。我们希望我们的测试能捕捉这些类型的错误。

我们的测试设置基本如下:

  1. 使用努力的连接工厂创建一个db连接。这是每个测试中唯一的连接实例(当我们尝试使用持久连接时,使用唯一的键)。
  2. 创建带有该连接的db上下文,并为测试添加我们希望存在的数据。
  3. 在DI容器中为db上下文注册服务覆盖。

问题是,我们无法解决如何配置Effort.EF6以不允许延迟加载,因为在测试设置中添加到上下文中的任何内容似乎都已在测试代码运行时加载,因此我们从未看到异常。我们假设这是因为我们在测试设置和实际代码执行之间重用上下文实例。

如果我们试图将第三步切换到以下步骤:

  1. 在db连接的DI容器中注册服务覆盖。
  2. DI容器创建一个db上下文实例(将db连接作为注入的依赖项)

相反,我们最终得到了一个空的db上下文,即它没有数据,尽管我们在运行测试之前添加了几个数据点。

我们如何使用努力来构造和注入db上下文,如果缺少.Include()语句,但如果它在那里,则会失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-20 14:12:05

您也必须在Effort.EF6的构造函数中禁用它--接受DbConnection对象的构造函数。

我为EF代码第一个项目解决了这个问题,如下所示:

代码语言:javascript
复制
public class MyDataContext : DbContext, IMyDataContext
{
    /*
    * the ohter stuff like IDbSet<T> etc.
    */


    public MyDataContext() : base("name=MyConnectionString")
    {
        Configure();
    }

    /// <summary>
    /// This constructor is for test usage only!
    /// </summary>
    /// <param name="connection">Test connection for in memory database</param>
    public MyDataContext(DbConnection connection) : base(connection, true)
    {
        Configure();
    }


    /// <summary>
    /// Configures the data context.
    /// </summary>
    private void Configure()
    {
        Configuration.LazyLoadingEnabled = false;
    }
}

此外,在我的测试项目中,我正在设置测试CSV文件。Effort.EF6将使用这些文件实例化带有种子数据的上下文。在我的例子中,我编写了一个小的TestDataManager,它允许将特定的表添加到特定的文件中。

下面是一段代码,您可以使用Effort.EF6为数据添加种子:

代码语言:javascript
复制
IDataLoader loader = new CsvDataLoader(@"C:\Temp\Test_CSV_Files");
DbConnection dbConnection = DbConnectionFactory.CreateTransient(loader);
var myDataContext = new MyDataContext(dbConnection);

也许这个博客帖子也能帮你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46850651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档