实体框架(代码优先)在内存数据库中进行单元测试

时间:2012-08-15 11:05:10

标签: entity-framework unit-testing

出于单元测试的目的,是否可以这样做:

  • 将某种格式的测试数据(XML?)检入源代码管理
  • 运行单元测试时,从此测试数据中实例化某种内存数据库
  • 在单元测试运行期间,让EF在内存数据库中运行

我们不希望我们的单元测试依赖于特定的外部数据库,并且处于特定的状态。

我们也不希望在我们的代码和测试中保持两个不同的“世界”,即EF对真实数据库运行的真实世界以及我们的测试针对某种EF模拟运行的虚假工作。

1 个答案:

答案 0 :(得分:6)

单元测试不应依赖于任何数据库。对数据库的任何依赖(即使在内存数据库中)都意味着您正在进行集成测试,并且应该针对您将要使用的真实数据库进行集成测试。

我不知道EF的任何XML数据库,但即使它存在,你又回到了你的要求之前:我们也不想在我们的代码中维护两个不同的“世界”并测试< / em>的。每个数据库都有自己的EF提供商,由不同的公司创建。即使是MS SQL Server和MS SQL Server Compact Edition的提供程序也不同,它们之间的切换非常具有挑战性。

你应该做什么:

  • 隐藏一些抽象背后的所有EF用法(包括Linq-to-entities查询等所有内容)并模拟此抽象而不是EF用于单元测试
  • 对要在生产中使用的真实数据库实现进行集成测试以测试抽象本身