go 表驱动测试把多组输入和预期放进结构体切片,再用 t.run() 给每组建立子测试。用例增加时,只需要向表里追加一行。

写出待测试的区间限制函数
在空目录执行 go mod init example.com/clamp,再保存 clamp.go。约定下限不大于上限。
package clamp
func Clamp(value, low, high int) int {
if value < low {
return low
}
if value > high {
return high
}
return value
}这个函数包含低于、位于和高于区间的三条路径。
用结构体表覆盖三条路径
保存为 clamp_test.go,测试与被测函数放在同一个包。
package clamp
import "testing"
func TestClamp(t *testing.T) {
cases := []struct {
name string
value, want int
}{
{"below", -1, 0},
{"inside", 5, 5},
{"above", 11, 10},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := Clamp(tc.value, 0, 10); got != tc.want {
t.Fatalf("got %d, want %d", got, tc.want)
}
})
}
}
本例串行运行。失败信息包含具体子用例名。
运行整张表或只跑一个用例
在模块目录执行。
go test -v go test -v -run '^TestClamp$/^below$'
第一条应通过三个子测试,第二条只匹配 below。


















