5

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

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

?

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

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

4

1 回答 1

6

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

我不知道任何用于 EF 的 XML 数据库,但即使它存在,您也会回到您的要求之前:我们也不想在我们的代码和 test 中维护两个不同的“世界”。每个数据库都有自己的 EF 提供程序,由不同的公司创建。即使是 MS SQL Server 和 MS SQL Server Compact Edition 的提供程序也存在很大差异,因此在它们之间进行切换非常具有挑战性。

你应该做什么:

  • 将所有 EF 使用隐藏在一些抽象后面(包括包括 Linq-to-entities 查询在内的所有内容)并模拟此抽象而不是 EF 以进行单元测试
  • 针对您想在生产中使用的真实数据库实现使用集成测试来测试抽象本身
于 2012-08-15T12:06:47.990 回答