我是Visual Studio2017,EF6,我正在使用这个T4模板https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator来生成我的上下文类
作为测试的铁杆粉丝,我已经有了100%的单元测试覆盖率,但现在我想做集成测试,我可以调用我系统的多个部分并通过更改-但当然我希望在不接触真正的磁盘数据库的情况下这样做。
因此,在搜索了一下之后,我找到了Effort https://entityframework-effort.net/,对我来说,这看起来正是我想要使用的。在那里我可以在内存中创建一个数据库,用我想要的任何fixture填充它,然后从系统的不同部分调用多个方法。然而,我试图找出的是如何在我的情况下工作,我已经尝试了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生成器来创建上下文,并将其与努力一起使用。我喜欢两者都使用,如果有人能给我一个指针,这样我就可以在内存DB中进行像样的集成测试,我会很高兴的。
关于朱利安
这是Poco中从t4模板生成的方法
public NewsEntities(System.Data.Common.DbConnection existingConnection)
: base(existingConnection, true)
{
this.Database.Connection.Open();
}发布于 2019-03-13 19:04:49
好的,在查看了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模板来做一些不同的事情。
https://stackoverflow.com/questions/55137605
复制相似问题