当您对返回类型为error的函数进行单元测试时,我想知道如何正确地对此错误进行单元测试.您是否应该只判断错误是否为零?或者,您是否也应该验证错误字符串是否与预期字符串匹配?

推荐答案

在大多数情况下,您只需判断错误是否为零.

我建议除非绝对必要,否则不要判断错误字符串.我通常认为错误字符串仅供人类使用.

如果您需要有关错误的更多详细信息,更好的替代方法是具有自定义错误类型.然后,您可以对错误(Type)进行切换,看看它是否是您期望的类型. 如果需要更多详细信息,可以使自定义错误类型包含值,然后可以在测试中判断这些值.

Go的错误只是具有Error() string方法的类型的接口,所以自己实现它们很简单. https://blog.golang.org/error-handling-and-go

Go相关问答推荐

追加一个字节数组的分配比2个字节数组的分配要少得多

有没有办法通过Go cmdline或IDE(IntelliJ)找出我的 struct 实现了什么接口?

为什么Slices包中的函数定义Slice参数的类型参数?

如何在gofiber/websocket/v2中设置状态代码和原因

如果第一次匹配条件,如何跳过切片中的值

如何根据中间件的请求设置上下文值?获取 go-staticcheck 问题

使用反射在Go中递归迭代 struct 体和集合字段

如何忽略打印达到最大深度限制 go colly

如何用mpb创建两行进度条?

如何匹配两次出现的相同但随机字符串之间的字符

如何在模板中传递和访问 struct 片段和 struct

整理时转换值

CBC Decrypter 解密加密文本,但部分文本被随机字符替换

如何将具有嵌入式 struct 的 struct 展平为 json

在 Go 中发送 ack 和 term 后消息仍在 nats 限制队列中

转到文本/模板模板:如何根据模板本身的值数组判断值?

为什么 x/net/html Token().Attr 上的 len 在此处为空切片返回非零值?

Go Fyne 禁用 HSplit 调整大小?

如何扩充 ResponseWriter 的 Header() 返回的 map

Go 错误:Is() 和 As() 声称是递归的,是否有任何类型实现错误接口并支持这种递归 - 无错误?