答案:Go语言中通过t.Error、errors.Is/As及testify库验证错误。首先检查err是否为nil,再用errors.Is判断是否包含目标错误,errors.As断言具体错误类型,或使用testify简化断言流程,确保错误处理正确。

在Go语言开发中,错误处理是程序健壮性的关键部分。为了确保代码在异常情况下行为正确,必须对错误处理逻辑进行充分的单元测试。下面介绍几种常用的Golang单元测试中验证错误的方法。
最基础的方式是在测试函数中调用目标函数,然后判断返回的 error 是否为 nil 或是否匹配预期类型/消息。
例如,假设有一个除法函数:
func Divide(a, b float64) (float64, error) {对应的测试可以这样写:
立即学习“go语言免费学习笔记(深入)”;
func TestDivide_ByZero(t *testing.T) {从 Go 1.13 开始,标准库提供了 errors.Is 和 errors.As 来更安全地比较和解包错误。
如果你使用的是自定义错误类型或 wrapped 错误,应优先使用这些方法。
var ErrDivideByZero = errors.New("cannot divide by zero")测试时使用 errors.Is 判断是否包含目标错误:
func TestDivide_WithErrorIs(t *testing.T) {当你的函数返回特定类型的错误(如自定义结构体),可以用 errors.As 提取并验证字段。
type ValidationError struct {测试时判断错误是否为该类型:
func TestSomeValidation(t *testing.T) {虽然标准 testing 包足够用,但使用像 testify 这样的库可以让错误验证更简洁。
import "github.com/stretchr/testify/assert"注意:Go 1.14 起,testing.T 提供了 t.ErrorContains 方法,也可用于检查错误信息子串。
基本上就这些。关键是根据错误的设计方式选择合适的验证策略:简单字符串比较适用于调试信息,errors.Is/As 更适合生产级错误处理,而测试库能提升可读性。不复杂但容易忽略的是对 wrapped 错误的正确解包和类型断言。
以上就是如何测试Golang错误处理逻辑_Golang单元测试错误验证方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号