在使用EFProf(实体框架Profiler)进行单元测试时使用Effort的ASP Boilerplate问题

时间:2017-01-30 05:05:35

标签: entity-framework unit-testing entity-framework-6 effort asp.net-boilerplate

在ASP Boilerplate(http://www.hibernatingrhinos.com/products/EFProf)中使用EFProf(http://www.aspnetboilerplate.com/)时出现问题。

对于单元测试,ASP Boilerplate使用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不兼容?或者我在初始化时做了一些明显错误的事情?

1 个答案:

答案 0 :(得分:2)

回答我自己的问题:Effort伪造了DbContect对象但实际上没有为内存创建SQL,因此没有任何东西可以被分析器拦截。这也是使用EF6的Database.Log with Effort时CommandText始终为null的原因。

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