【问题标题】:Why should I create interfaces for my concrete DataProvider classes为什么要为具体的 DataProvider 类创建接口
【发布时间】:2012-02-15 10:14:25
【问题描述】:

我使用了很多 Microsoft SQL Server 专有的东西。 我不需要多个实现相同接口的具体类。

那么为什么我的 DataProvider 类需要一个接口呢?

【问题讨论】:

    标签: c# sql sql-server ado.net dao


    【解决方案1】:

    您应该创建接口,以便更轻松地测试依赖于您的数据的代码。

    拥有接口并对这些接口进行编码意味着您可以在测试中注入模拟和存根。

    【讨论】:

    • 我不对我的 DataProvider 类进行单元测试。我对我的服务层进行集成测试。因此,我的 dataprovider 类中不需要接口。因此我不需要嘲笑任何东西。我使用模拟的地方是我的 asp.net mvc 控制器和我的服务接口,但这是有道理的。
    • 这样您可以更轻松地对使用 DataProvider 类的类进行单元测试。当您必须处理复杂的场景时(想象一个仅在以某种方式设置 4 个表中的数据时才会出现的错误),能够模拟您的存储库以返回您期望的数据比它要容易得多将数据库设置为始终返回该数据。另外,如果您依赖数据库返回某些数据,那么您正在编写集成测试,而不是真正的单元测试。
    • @rsbarro 因此我写了我做集成测试,这不比做单元测试差。
    • 想象一下这个场景:你有一个类,它应该根据数据库中某个字段的值写出一条消息。数据库中的字段可以有 20 个唯一值。要使用集成测试处理此类测试,您需要 20 条数据库记录,每条记录都有不同的值。要使用可模拟存储库来处理此问题,需要数据库中的 0 条记录,因为您只需设置一个模拟来返回测试所需的值。这种方法更容易且不易出错(因为其他开发人员可能会更改您的测试记录)。
    • @Pascal - 有许多类型的集成测试。如果您只是想在 UI 和业务逻辑之间进行测试而不涉及 DB,那么您知道您有一个不依赖于 DB 状态的可重复测试,这就是如何做到这一点。
    【解决方案2】:

    可能有很多方法可以回答这个问题,但是在 DataProvider 上使用接口(尤其是像存储库模式这样的模式)的一个优点是,您可以模拟该接口,允许您对使用的代码进行单元测试更轻松地使用 DataProvider。

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2015-08-07
      • 2014-09-23
      • 2011-05-09
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多