Entity framework 用于单元测试的内存数据库中的实体框架(代码优先)
出于单元测试目的,是否可以执行以下操作:Entity framework 用于单元测试的内存数据库中的实体框架(代码优先),entity-framework,unit-testing,Entity Framework,Unit Testing,出于单元测试目的,是否可以执行以下操作: 将某种格式(XML?)的测试数据签入源代码管理 当运行单元测试时,从该测试数据实例化某种内存中的数据库 在单元测试运行期间,让EF针对该内存中数据库运行 ? 我们不希望我们的单元测试依赖于存在的特定外部数据库,并且处于特定状态 我们也不想在代码和测试中维护两个不同的“世界”,一个是EF运行在真实db上的真实世界,另一个是我们的测试运行在某种EF模拟上的虚假工作。单元测试不应该依赖于任何数据库。对数据库(甚至内存数据库)的任何依赖性都意味着您正在进行集
- 将某种格式(XML?)的测试数据签入源代码管理
- 当运行单元测试时,从该测试数据实例化某种内存中的数据库
- 在单元测试运行期间,让EF针对该内存中数据库运行
我们也不想在代码和测试中维护两个不同的“世界”,一个是EF运行在真实db上的真实世界,另一个是我们的测试运行在某种EF模拟上的虚假工作。单元测试不应该依赖于任何数据库。对数据库(甚至内存数据库)的任何依赖性都意味着您正在进行集成测试,集成测试应该针对您将要使用的真实数据库进行 我不知道EF有任何XML数据库,但即使它存在,您也可以回到您的需求前面:我们也不希望在代码和测试中维护两个不同的“世界”。每个数据库都有自己的EF提供者,由不同的公司创建。即使是MS SQL Server和MS SQL Server Compact Edition的提供程序也有很大的不同,这使得在它们之间切换非常具有挑战性 你应该做什么:
- 将所有EF使用隐藏在某个抽象背后(包括所有内容,包括Linq到实体查询),并模拟此抽象,而不是单元测试的EF
- 针对您希望在生产中使用的真实数据库实现使用集成测试来测试抽象本身