测试渴望加载场景我们使用Effort.EF6建立一个测试套件的ASP.NET Web API 2服务针对内存数据库的工作,并且在大多数情况下这是一个奇妙的经历。与Effort.EF6
然而,无关对这个问题的原因,我们有(通过在数据库方面的构造函数运行Configuration.LazyLoadingEnabled = false;
),这意味着,如果我们忘记.Include()
关系的地方,后来关闭延迟加载在EF6使用它,我们得到NullReferenceExceptions
。我们希望我们的测试能够捕获这些类型的错误。
我们的测试设置基本如下:
- 用努力的连接工厂创建一个数据库连接。这是每个测试的唯一连接实例(当我们尝试持续连接时,使用唯一密钥)。
- 用该连接创建一个数据库上下文,并添加我们想要存在的数据用于测试。
- 在数据库上下文的DI容器中注册服务覆盖。
问题是我们无法弄清楚如何Effort.EF6配置为不允许延迟加载,因为它似乎我们已经加入到我们的测试设置情况下任何已经被加载时,被测代码运行,因此我们从来没有看到例外。我们假设这是因为我们在测试设置和实际代码执行之间重新使用上下文实例。
如果我们试图到第三步骤切换到以下内容:
- 注册在用于分贝连接DI容器一个服务覆盖。尽管我们增加了一些数据
- 的DI容器创建一个数据库上下文实例(取数据库连接作为注入依赖)
我们,而不是与空分贝背景下结束了,也就是没有数据在运行测试之前点。
我们如何使用Effort构造并注入一个数据库上下文,如果.Include()
语句丢失,将会失败,但如果它在那里工作,将会失败?
你是如何禁用延迟加载?我认为在'DbContext'构造函数中这样做会普遍实现。 –
我们的'Configuration.LazyLoadingEnabled = false;'在我们的数据库上下文的构造函数中;编辑以包含这一事实。 –
在我看来,您应该能够为每个单元测试使用原始上下文,并且应该始终加载您希望它加载到测试中的数据。如果这没有发生,我想知道你的配置是否正确。 –