表格驱动测试
表格驱动测试的优势
- 分离的测试数据和测试逻辑
- 明确的出错信息
- 可以部分失败
- go 语言的语法使得我们更易实践表格驱动测试
func TestTriangle(t *testing.T) {
tests := []struct{ a, b, c int} {
{3, 4, 5},
{5, 12, 13},
{8, 15, 17},
{12, 35, 0},
{30000, 40000, 50000},
}
for _, tt := range tests {
if actual := calcTriangle(tt.a, tt.b); actual != tt.c {
t.Errorf("calcTriangle(%d, %d); " + "got %d; expected %d", tt.a, tt.b, actual, tt.c)
}
}
}
func calcTriangle(a, b int) int {
var c int
c = int(math.Sqrt(float64(a * a + b * b)))
return c
}
benchmark 示例
这里我们不需要指定一个循环的循环次数,go 会帮我们做好的
func BenchmarkSubstr(b *testing.B) {
s := "黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花"
ans := 8
for i := 0; i < b.N; i++ {
actual := lengthOfNonRepeatingSubStr(s)
if actual != ans {
b.Errorf("got %d for input %s;"+"expected %d", actual, s, ans)
}
}
}
命令行测试常用指令
运行测试文件
go test .
查看代码覆盖率
go tool cover -html=c.out
运行benchmark
go test -bench .
查看cpu占用,来优化代码
go test -bench . -cpuprofile cpu.out
go tool pprof cpu.out
> web
查看文档
godoc -http: 6060