当您对具有 error
返回类型的函数进行单元测试时,我想知道如何正确地对该错误进行单元测试。您是否应该只检查错误是否为零?或者您是否应该验证错误字符串也与预期字符串匹配?
原文由 GabeMeister 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您对具有 error
返回类型的函数进行单元测试时,我想知道如何正确地对该错误进行单元测试。您是否应该只检查错误是否为零?或者您是否应该验证错误字符串也与预期字符串匹配?
原文由 GabeMeister 发布,翻译遵循 CC BY-SA 4.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.T
和err
是类型error
原文由 Roel4811 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答877 阅读✓ 已解决
2 回答2.2k 阅读
在大多数情况下,您可以检查错误是否不为零。
我建议除非绝对必要,否则不要检查错误字符串。我通常认为错误字符串仅供人类使用。
如果您需要有关错误的更多详细信息,一个更好的选择是使用自定义错误类型。然后您可以切换 err.(type) 并查看它是否是您期望的类型。如果您需要更多详细信息,您可以使自定义错误类型包含您可以在测试中检查的值。
Go 的错误只是具有
Error() string
方法的类型的接口,因此您自己实现它们很简单。 https://blog.golang.org/error-handling-and-go