【问题标题】:Entity Framework Code First - Tests Overlapping Each Other实体框架代码优先 - 测试相互重叠
【发布时间】:2012-01-15 15:08:43
【问题描述】:

我的集成测试使用的是使用 EF 初始化程序生成的实时数据库。当我单独运行测试时,它们按预期运行。但是,当我一次运行它们时,我得到了很多失败的测试。

我似乎有一些重叠发生。例如,我有两个使用相同设置方法的测试。此设置方法构建并填充数据库。两个测试都执行相同的测试 ACT,它向数据库中添加了一些项目(相同的项目),但独特的是每个测试都在寻找不同的计算(而不是一个做很多事情的大测试)。

我可以解决这个问题的一种方法是在设置中做一些技巧,为每个运行的测试创建一个唯一的数据库,这样一切都保持隔离。但是,当我这样做时,EF 初始化的东西不起作用,因为它正在创建一个新的数据库,而不是用一个新的数据库删除并替换它(后者触发播种)。

关于如何解决这个问题的想法?似乎是我的测试组织......只是没有展示如何最好地进行它并且正在寻找输入。真的不想手动运行每个测试。

【问题讨论】:

    标签: testing entity-framework-4.1 code-first


    【解决方案1】:

    使用测试框架提供的测试设置和拆除方法,并在测试设置中启动事务并在测试拆除中回滚事务 (example for NUnit)。您甚至可以将 setup 和 tear down 方法放到所有测试的基类中,然后每个测试将在其自己的事务中运行,该事务将在测试结束时回滚并将数据库置于其初始状态。

    【讨论】:

      【解决方案2】:

      在 Ladislav 提到的内容旁边,您还可以使用所谓的 Delta Assertion

      例如,假设您测试将新的Order 添加到 SUT。

      您可以创建一个测试,在测试结束时断言数据库中恰好有 1 个Order

      但是您也可以通过在测试方法开始时首先检查数据库中有多少订单来创建 Delta 断言。然后在向 SUT 添加 Order 后,您测试数据库中有 NumberOfOrdersAtStart + 1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多