gpt4 book ai didi

unit-testing - 为什么数据库类型在 GO 中不是接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 01:21:43 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于unit-testing - 为什么数据库类型在 GO 中不是接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com