测试与基准
_test.go、TestXxx 函数、表驱动测试、go test -bench
测试与基准
Go 测试零依赖——标准库 testing 包搞定一切。表驱动测试是 Go 社区的标志性实践。
学完本章你将: 掌握 _test.go、TestXxx、表驱动测试、go test -bench。
测试文件约定
go
// math_test.go(和 math.go 同目录)
package math
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("Add(2,3) = %d; want 5", result)
}
}
bash
go test # 运行所有测试
go test -v # 详细输出
go test -run TestAdd # 运行特定测试
go test -cover # 测试覆盖率
表驱动测试(Go 的测试美学)
go
func TestDivide(t *testing.T) {
tests := []struct {
name string
a, b float64
want float64
wantErr bool
}{
{"正常除法", 10, 2, 5, false},
{"除零", 10, 0, 0, true},
{"零除以某数", 0, 5, 0, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := Divide(tt.a, tt.b)
if (err != nil) != tt.wantErr {
t.Errorf("Divide() error = %v", err)
return
}
if got != tt.want {
t.Errorf("Divide() = %v, want %v", got, tt.want)
}
})
}
}
基准测试
go
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ { // b.N 自动调整
Add(2, 3)
}
}
bash
go test -bench=.
go test -bench=. -benchmem # 同时显示内存分配