【问题标题】:Why does everyone wants to do unit tests with the entity framework and not integration tests [duplicate]为什么每个人都想用实体框架做单元测试而不是集成测试[重复]
【发布时间】:2013-02-18 07:12:11
【问题描述】:

我在 google 中看到的很多人都在努力使用所谓的内存数据库对存储库类进行单元测试,而不是使用真实数据库进行集成测试。

做后者的问题在哪里?

【问题讨论】:

  • 给给我-1的那个人。我第一次阅读有关此主题的内容,但没有找到提供的链接,那么为什么要对这个好问题进行惩罚呢?
  • 很容易解决:) +1,因为我同意,好问题,即使它是重复的......

标签: entity-framework unit-testing integration-testing


【解决方案1】:

如果您使用的是 EF,则不必编写测试来查看 EF 是否正确保存数据。所以你不需要一个真正的数据库来进行测试,你只需要测试你的代码逻辑和内存数据库最适合这种情况,它有助于分离关注点,灵活,易于运行并且运行速度比使用真实的数据库。

此外,使用真实数据库运行集成测试非常复杂。它在运行之前需要一些配置(连接字符串、删除和重新创建数据库...),这可能需要一些时间。测试可能会因为配置错误(例如在测试期间使用共享数据库)而失败,并且需要时间来调试。

【讨论】:

    【解决方案2】:

    无论您是针对内存数据库还是真实数据库进行测试,您都没有进行单元测试——两​​者都是集成测试。两者都将实际测试某种形式的连接和提供程序实现。

    使用内存数据库与真实数据库相比,我看到的主要好处是

    • 权限 - 使用真实数据库通常需要更高级别的权限和连接性。就像文件写入权限或对数据库服务器的访问一样。内存数据库可能不需要相同级别的权限。
    • 速度 - 启动和关闭内存数据库比真正的数据库更快

    根据您的模式(即,如果您使用的是工作单元),您甚至可能不需要数据库来测试您的存储库。

    【讨论】:

    • 是的,我使用工作单元模式。所以我不需要真实的或内存中的数据库。请澄清这一点。
    • 你可以抽象你的 DbContext 并尝试像 stackoverflow.com/questions/13332002/… 那样模拟 IQueryable
    • 但是我会像你发布的链接一样结束。链接说只做单元测试是不够的。因此,我首先想做的集成测试对我来说已经足够了。
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多