在3层架构中对数据访问层进行单元测试

时间:2013-12-21 06:56:55

标签: entity-framework unit-testing mocking data-access-layer

在典型的3层架构应用程序中,有:

  • 业务逻辑层
  • 数据访问层
  • 数据存储层

我正在考虑在不使用真实数据库的情况下测试DAL(尤其是具有实体框架的DAL)。但是在数据库中模拟复杂的外键约束有点困难。还有很多其他的事情。

我现在在想这是否是对DAL进行单元测试的正确方法?或者哪个层最受单元测试的影响?

我看到一些文章trying to mock the DbContext in the Entity Framework。用这种方法模拟外键关系似乎很困难。我想知道它是否正确的接缝位置。我们可以在其他地方嘲笑吗?比如围绕ADO.NET层进行嘲弄? 的即。用于ADO.NET的内存模拟数据库。

Mocking somewhere else

2 个答案:

答案 0 :(得分:3)

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

更好的3层架构方法是防止业务逻辑层直接与数据访问层中的类进行对话。应该通过您定义的接口完成跨层通信。数据访问层可以了解业务逻辑层,但业务逻辑层应该只知道数据访问接口,而不关心该接口是如何实现的。

然后,您可以使用虚假数据访问替换实际数据访问。请参阅Bob叔叔的演讲Architecture: The Lost Years

答案 1 :(得分:2)

模拟数据库的东西是非常困难,耗时和繁琐的。因此,更实际的方法是设置一个测试数据库,让你的测试运行它,并组合测试整个持久性事物 - 这不是单元测试,但更实用..

Btw。:典型的3层架构是:

  1. 表示层
  2. 业务逻辑层
  3. 持久层(部分是数据存储系统 - 主要是数据库)