簡體   English   中英

努力單元測試實體框架6.1.3 DB-first

[英]Effort unit testing Entity framework 6.1.3 DB-first

使用Effort框架(版本1.1.4)對我的數據庫層進行單元測試時遇到問題。

我有一個使用Entity framework 6.1.3的DB層,並且使用數據庫優先方法創建模型,因此有一個描述模型的*.edmx文件。

我創建了一個部分類來公開單元測試使用的額外構造函數,如下所示:

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

簡單的單元測試如下所示:

    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);
        }
    }

當我運行單元測試時,它會拋出一行異常:

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

{“提供程序未返回ProviderManifest實例。”} InnerException消息:{“無法確定存儲版本;需要有效的存儲連接或版本提示。”}

我發現的其他帖子建議將*.edmx文件中的ProviderManifestToken屬性從“2012”更改為“2008”。 這似乎解決了這個問題,但是在嘗試第一次使用上下文時,又給出了另一個例外:

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

NotSupportedException無法確定“System.Data.EntityClient.EntityProviderFactory”類型的提供程序工廠的提供程序名稱。 確保在應用程序配置中安裝或注冊了ADO.NET提供程序。

任何人都知道如何解決這個問題所以我可以使用Effort實體框架6.1.3 DB-first方法?

我已經成功地使用Effort(版本1.1.4)來使用DB-first方法對在EF 4和EF 5中創建的DB層進行單元測試 - 這就是為什么我認為EF版本可能會引起關注...

我的一位同事找到了我的問題的解決方案!

顯然我使用的是“Effort”nuget包而不是“Effort.EF6”nuget包。 卸載並安裝另一個后,我還必須使用標簽更新我的App.Config:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

我還在SetUp中調用了我的單元測試來注冊工作提供者:

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

這解決了我的問題。 希望它可以為他人提供一些幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM