表驱动测试是 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。