为什么每个人都希望使用实体框架进行单元测试而不是集成测试

时间:2013-02-18 07:12:11

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

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

做后者的问题在哪里?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

  • 权限 - 使用真实数据库通常需要更高级别的权限和连接。与文件写入权限或访问数据库服务器一样。内存数据库可能不需要相同级别的权限。
  • 速度 - 旋转和拆除内存数据库比真实数据库更快

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