Go 表格驱动测试写法入门
wxk1991 Lv5

Go 表格驱动测试写法入门

Go 标准库内置测试框架。表格驱动测试是 Go 项目里非常常见的写法,适合用一组输入输出覆盖多个边界场景。


一、普通测试

1
2
3
4
5
6
7
8
9
10
func Add(a, b int) int {
return a + b
}

func TestAdd(t *testing.T) {
got := Add(1, 2)
if got != 3 {
t.Fatalf("got %d", got)
}
}

运行:

1
go test ./...

二、表格驱动测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func TestAdd(t *testing.T) {
cases := []struct {
name string
a int
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) {
got := Add(tc.a, tc.b)
if got != tc.want {
t.Fatalf("got %d, want %d", got, tc.want)
}
})
}
}

每个 case 都有名字,失败时定位更方便。


三、测试错误路径

不要只测试正常输入。解析、校验、权限判断这类函数尤其要覆盖错误场景。

1
2
3
if err == nil {
t.Fatal("expected error")
}

四、实践建议

表格驱动测试适合纯函数、参数校验、格式转换、业务规则判断。不建议把所有复杂集成测试都硬塞成一张表,否则可读性会下降。

好测试应该让人一眼看出:输入是什么、期望是什么、失败意味着什么。