所以我是Visual Studio 2017,EF6,並且我正在使用此T4模板https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator生成上下文類
作為測試的忠實擁護者,我已經擁有100%的單元測試覆蓋率,但是現在我想進行集成測試,可以在其中調用系統的多個部分並進行更改-但是,我當然想做到這一點而無需碰到實際磁盤數據庫。
因此,在搜索了一下之後,我發現了Effort https://entityframework-effort.net/ ,對我來說,這正是我想要使用的東西。我可以在其中創建一個在內存中的數據庫,在其中填充所需的固定裝置,然後從系統的各個部分調用多個方法。但是,我試圖找出的問題是如何使其在我遇到的情況下能夠正常工作,我嘗試了DBConnectionFactory,EntityConnectionFactory,ObjectConnectionFactory,每次收到錯誤消息時:
“ EffortException:數據庫尚未初始化”。
這是我在設置中使用的代碼塊:-
var newsCtx = Effort.DbConnectionFactory.CreatePersistent("2");
_newsEntities = new NewsEntities(newsCtx);
_newsEntities.Database.CreateIfNotExists();
_newsEntities.Channels.Add(new Channel
{
Id = 1,
Title = "Convenience Store - ",
Link = "https://www.conveniencestore.co.uk/XmlServers/navsectionRSS.aspx?navsectioncode=123",
Description = "https://www.conveniencestore.co.uk",
Image = "https://www.conveniencestore.co.uk/magazine/dest/graphics/logo/logo.png",
PublishedAt = null,
UpdatedAt = DateTime.Now.AddDays(-2),
Enabled = true,
Type = "Rss_2_0",
Author = null,
Category = null,
Copyright = null,
Generator = null
});
_newsEntities.SaveChanges();
當我進入saveChanges時,出現了一個異常,該異常表明我添加了已經完成的.CreateIfNotExists(),但是仍然出現錯誤。我可以在它可以工作的各個鏈接上看到示例和示例。但是,我不想放棄我的t4模板,因為它確實提供了我想要的。
我有點迷茫,我想知道是否有人使用反向poco生成器來創建上下文並將其與Effort結合使用。我很樂意同時使用這兩種方法,如果有人可以給我一個指針,以便我可以在內存DB中進行不錯的集成測試,那我會像個小男孩一樣開心
問候朱利安
這是Poco從t4模板生成的方法
public NewsEntities(System.Data.Common.DbConnection existingConnection)
: base(existingConnection, true)
{
this.Database.Connection.Open();
}
好的,所以在查看了https://www.stevefenton.co.uk/2015/11/using-an-in-memory-database-as-a-test-double-with-entity-framework/此鏈接後,我得到了想知道我的反向poco生成器在這些方法中的表現如何,我在方法內部有以下內容
this.Database.Connection.Open();
這是造成問題的原因。...從.ttinclude poco生成器中刪除此行使Effort能夠運行。為什麼不在那裡,我不知道,刪除它似乎沒有效果。
因此,我很高興再次成為沙童,並且可以使用內存數據庫繼續進行集成測試。如果遇到此問題,請查看是否有人修改了您的t4模板以執行其他操作。