表驱动测试是 Go 测试的惯用模式:把用例组织成结构体切片(输入 + 期望),用循环逐条执行子测试。相比逐条写测试函数,它新增用例零成本、断言风格统一、覆盖率一目了然。
func TestAdd(t *testing.T) {
cases := []struct {
name string
a, b int
want int
}{
{"positive", 1, 2, 3},
{"zero", 0, 0, 0},
{"negative", -1, -2, -3},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := Add(tc.a, tc.b); got != tc.want {
t.Errorf("Add(%d,%d)=%d, want %d", tc.a, tc.b, got, tc.want)
}
})
}
}
配套技巧:t.Run 生成子测试,可用 go test -run TestAdd/positive 精确执行;子测试里 t.Parallel() 实现用例级并发;断言失败用 Errorf 继续跑、Fatalf 中止当前用例;覆盖率用 go test -coverprofile 结合 go tool cover;第三方 testify 的 assert/require 可减少样板。注意 t.Parallel 与循环变量捕获的经典坑(Go 1.22 已修复变量捕获语义)。
追问方向:模糊测试 go test -fuzz(1.18+)、golden file 测试、TestMain 的 setup/teardown。