如何对 Go 错误进行单元测试

新手上路,请多包涵

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

原文由 GabeMeister 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 681
2 个回答

在大多数情况下,您可以检查错误是否不为零。

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

如果您需要有关错误的更多详细信息,一个更好的选择是使用自定义错误类型。然后您可以切换 err.(type) 并查看它是否是您期望的类型。如果您需要更多详细信息,您可以使自定义错误类型包含您可以在测试中检查的值。

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

原文由 Omar 发布,翻译遵循 CC BY-SA 3.0 许可协议

testify 会派上用场。

来自文档:“EqualErrorf 断言函数返回错误(即不是 nil )并且它等于提供的错误。”:

 assert.EqualErrorf(t, err, expectedErrorMsg, "Error should be: %v, got: %v", expectedErrorMsg, err)

要断言错误消息包含一个子字符串:

 assert.Containsf(t, err.Error(), tt.wantErrMsg, "expected error containing %q, got %s", tt.wantErrMsg, err)

t 是类型 *testing.Terr 是类型 error

原文由 Roel4811 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题