C# 为什么我要为我的具体数据提供者类创建接口

C# 为什么我要为我的具体数据提供者类创建接口,c#,sql,sql-server,ado.net,dao,C#,Sql,Sql Server,Ado.net,Dao,我用了很多微软SQL Server的合适的东西。 我不需要实现同一接口的多个具体类 那么为什么我的DataProvider类需要一个接口呢?您应该创建接口,以便更容易地测试依赖于数据的代码 拥有接口并对这些接口进行编码意味着您可以在测试中注入模拟和存根。您应该创建接口,以便更容易地测试依赖于数据的代码 拥有接口并对这些接口进行编码意味着您可以在测试中注入模拟和存根。回答这个问题的方法可能有很多,但在数据提供者上使用接口(特别是使用存储库模式)的一个优点是,您可以模拟该接口,允许您对代码进行单元测

我用了很多微软SQL Server的合适的东西。 我不需要实现同一接口的多个具体类


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

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


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

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


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

回答这个问题的方法可能有很多,但在数据提供者上使用接口(特别是使用存储库模式)的一个优点是,您可以模拟该接口,允许您对代码进行单元测试,以便更轻松地使用数据提供程序。

回答此问题的方法可能有很多,但在数据提供程序上使用接口(特别是使用存储库模式)的一个优点是,您可以模拟该接口,允许您对代码进行单元测试,以便更轻松地使用数据提供程序。

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