努力unit testingentity framework6.1.3 DB-first

使用Effort框架(版本1.1.4)对我的数据库层进行unit testing时,我遇到了问题。

我有一个使用Entity framework 6.1.3的DB层,并且使用数据库优先方法创建模型,因此有一个描述模型的*.edmx文件。

我创建了一个部分类来公开unit testing使用的额外构造函数,如下所示:

 public partial class Entities { public Entities(DbConnection connection) : base(connection, true) { } } 

简单的unit testing如下所示:

  private Entities CreateContext() { //var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString; //var connection = Effort.EntityConnectionFactory.CreateTransient(connectionString); //return new Entities(connection as DbConnection); var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities"); var context = new Entities(connection); return context; } [TestMethod] public void Testing_Effort_Integration() { using (var context = CreateContext()) { var entity = context.TableEntity.FirstOrDefault(i=> i.Id); Assert.IsNotNull(entity); } } 

当我运行unit testing时,它会抛出该行的exception:

 var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities"); 

{“提供程序未返回ProviderManifest实例。”} InnerException消息:{“无法确定存储版本;需要有效的存储连接或版本提示。”}

我发现的其他post建议将*.edmx文件中的ProviderManifestToken属性从“2012”更改为“2008”。 这似乎解决了这个问题,但是在尝试第一次使用上下文时,又给出了另一个例外:

 var entity = context.TableEntity.FirstOrDefault(i=> i.Id); 

NotSupportedException无法确定类型为“System.Data.EntityClient.EntityProviderFactory”的提供程序工厂的提供程序名称。 确保在应用程序配置中安装或注册了ADO.NET提供程序。

任何人都知道如何解决这个问题所以我可以使用Effortentity framework6.1.3 DB-first方法?

我已成功地使用Effort(版本1.1.4)以数据库优先方法对在EF 4和EF 5中创建的DB层进行unit testing – 这就是为什么我认为EF版本可能会引起关注…

我的一位同事找到了我的问题的解决方案!

显然我使用的是“Effort”nuget包而不是“Effort.EF6”nuget包。 卸载并安装另一个后,我还必须使用标签更新我的App.Config:

            

我还在SetUp中包含一个调用unit testing以注册工作提供程序:

  [SetUp] public void Setup() { EffortProviderConfiguration.RegisterProvider(); } 

这解决了我的问题。 希望它可以为他人提供一些帮助!