在 go 函数单元测试中,错误处理有两种主要策略:1. 将错误表示为 error 类型的具体值,用于断言预期值;2. 使用通道向测试函数传递错误,适用于测试并发代码。实战案例中,使用错误值策略确保函数对负数输入返回 0。

单元测试是确保代码健壮性和可靠性的重要步骤。在 Go 中,可以使用 testing 包来执行单元测试,其中包含处理错误的几种策略。
Go 中有两种处理错误的主要策略:
1. 错误值
将错误表示为 error 类型的具体值。要在单元测试中使用此方法,可以将错误断言为预期的值:
func TestMyFunction(t *testing.T) {
err := myFunction()
if err != nil {
t.Errorf("myFunction returned an unexpected error: %v", err)
}
}2. 错误通道
使用通道向测试函数传递错误。这对于测试并发代码很有用,因为可以同时观察多个错误:
func TestMyConcurrentFunction(t *testing.T) {
done := make(chan error)
go func() { done <- myConcurrentFunction() }()
select {
case err := <-done:
if err != nil {
t.Errorf("myConcurrentFunction returned an unexpected error: %v", err)
}
case <-time.After(time.Second):
t.Errorf("myConcurrentFunction did not complete within the timeout")
}
}考虑以下函数,它将切片中的数字相加:
func sum(numbers []int) int {
total := 0
for _, num := range numbers {
if num < 0 {
return 0
}
total += num
}
return total
}使用错误值策略进行单元测试,可以确保函数对负数输入返回 0:
func TestSum(t *testing.T) {
tests := []struct {
input []int
result int
}{
{[]int{1, 2, 3}, 6},
{[]int{0, 0, 0}, 0},
{[]int{-1, 0, 1}, 0},
}
for _, test := range tests {
result := sum(test.input)
if result != test.result {
t.Errorf("sum(%v) returned %d, expected %d", test.input, result, test.result)
}
}
}以上就是Go 函数单元测试的错误处理策略的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号