ASP 在使用 EFProf 进行单元测试时使用 Effort 的样板问题(Entity Framework Profiler)

ASP Boilerplate problems using Effort in unit testing with EFProf (Entity Framework Profiler)

使用 EFProf 时遇到问题 (http://www.hibernatingrhinos.com/products/EFProf) with ASP Boilerplate (http://www.aspnetboilerplate.com/)。

对于单元测试,ASP 样板使用 Effort (https://github.com/tamasflamich/effort) 模拟内存中的数据库。

如果我 运行 单元测试没有添加对 EFProf 的引用,则测试 运行 正确(绿色)。

如果我添加初始化行:

HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();

在我的测试基础 ctor 或我的应用程序项目的 Initialize() 中,我收到以下错误:

Castle.MicroKernel.ComponentActivator.ComponentActivatorException

ComponentActivator: 无法实例化 MyApp.EntityFramework.MyAppDataContext

内部异常有相关信息:

Error: Unable to cast object of type 'Effort.Provider.EffortConnection' to type 'HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection'.

Effort 是否与 EFProf 不兼容?还是我在初始化时做了一些明显的错误?

回答我自己的问题:Effort 伪造了 DbContect 对象,但实际上并未为 in-memory 创建 SQL,因此分析器无法拦截任何内容。这也是为什么在使用 EF6 的 Database.Log with Effort 时 CommandText 始终为 null 的原因。

我将尝试将 Moq 与 EF6 结合使用,以使用 in-memory 数据库实现进行测试,作为 Asp Boilerplate 的测试项目的替代方案,该项目根据本文使用 Effort:https://msdn.microsoft.com/en-us/library/dn314429(v=vs.113).aspx