为什么数据库类型不是GO中的接口

时间:2016-12-29 16:20:50

标签: unit-testing go

为了使代码更容易测试,强调使用接口而不是具体类型。我想知道为什么没有为像 Rows这样的 sql 包中的类型进行此操作。为了模拟这些依赖项,我必须创建自己的接口,以便我可以编写单元测试(而不是集成测试)。是不是面向DB的代码应该以这种方式进行测试?

1 个答案:

答案 0 :(得分:0)

在公共API中公开接口而不是具体类型会增加在向接口添加方法时破坏其他人代码的风险。

参见例如os.File。如果os.File是一个接口,它将是一个具有17个公共方法的接口。添加第18个方法会破坏定义自己实现os.File接口类型的每个人。相反,向当前os.File结构添加第18个方法不会破坏任何采用io.Readerio.Writer或任何其他定义方法子集的接口的方法。 os.File。它还不会破坏测试代码,这些代码会模拟这些io.Readerio.Writer接口。

如果您希望其他人定义他们自己的实现,请在公共API中公开接口。否则暴露一个具体的类型,让人们只使用他们需要的方法子集来定义你自己的具体类型实现的接口。