0

所以我是 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 结合使用。我很想同时使用两者,如果有人可以给我一个指针,以便我可以在内存数据库中进行体面的集成测试,我会像沙子一样开心

问候朱利安

这是 Poco 中从 t4 模板生成的方法

    public NewsEntities(System.Data.Common.DbConnection existingConnection)
        : base(existingConnection, true)
    {
        this.Database.Connection.Open();
    }
4

1 回答 1

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 模板以执行不同的操作。

于 2019-03-13T11:04:49.157 回答