所以我是Visual Studio 2017,EF6,并且我正在使用此T4模板https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator生成上下文类
作为测试的忠实粉丝,我已经拥有100%的单元测试覆盖率,但是现在我想进行集成测试,可以在其中调用系统的多个部分并进行更改-但是,我当然想这样做而不接触真正的磁盘数据库。
因此,在进行了一些搜索之后,我发现了工作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();
}
答案 0 :(得分:1)
好吧,所以在回顾了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模板以执行其他操作。