Entity framework 在三层体系结构中对数据访问层进行单元测试

Entity framework 在三层体系结构中对数据访问层进行单元测试,entity-framework,unit-testing,mocking,data-access-layer,Entity Framework,Unit Testing,Mocking,Data Access Layer,在典型的三层体系结构应用程序中,有: 业务逻辑层 数据访问层 数据存储层 我正在考虑在不使用实际数据库的情况下测试DAL(特别是带有实体框架的DAL)。但是在数据库中模拟复杂的外键约束有点困难。还有很多其他的事情 我现在在想,这是否是对DAL进行单元测试的正确方法?或者哪一层最容易进行单元测试 我看到一些文章。用这种方法模拟外键关系似乎很困难。我想知道它是否是接缝的正确位置。我们可以在别的地方开玩笑吗?比如围绕ADO.NET层进行模拟? 即ADO.NET使用的内存中模拟数据库。 模仿数据库内

在典型的三层体系结构应用程序中,有:

  • 业务逻辑层
  • 数据访问层
  • 数据存储层
我正在考虑在不使用实际数据库的情况下测试DAL(特别是带有实体框架的DAL)。但是在数据库中模拟复杂的外键约束有点困难。还有很多其他的事情

我现在在想,这是否是对DAL进行单元测试的正确方法?或者哪一层最容易进行单元测试

我看到一些文章。用这种方法模拟外键关系似乎很困难。我想知道它是否是接缝的正确位置。我们可以在别的地方开玩笑吗?比如围绕ADO.NET层进行模拟? 即ADO.NET使用的内存中模拟数据库。


模仿数据库内容是出了名的困难、耗时和麻烦。因此,一种更实用的方法是设置一个测试数据库,让您的测试针对它运行,并结合测试整个持久性—这不完全是单元测试,但更实用

顺便说一句:典型的三层架构是:

  • 表示层
  • 业务逻辑层
  • 持久层(数据存储系统的一部分,主要是数据库)

  • Thomas的回答提供了一种测试数据访问层的好方法。但它并没有提供一种替代方法

    对于三层体系结构,更合理的方法是防止业务逻辑层直接与数据访问层中的类对话。跨层通信应该通过您定义的接口完成。数据访问层可以知道业务逻辑层,但是业务逻辑层应该只知道数据访问接口,而不关心接口是如何实现的


    然后,您可以用伪数据访问替换真实数据访问。看看鲍勃叔叔的谈话。

    我同意。如果你真的想“嘲弄”DAL,那就这么做吧。