一、传统测试 vs 表格驱动测试
传统测试:
1.测试数据和测试逻辑混在一起
2.出错信息不明确
3.一旦一个数据出错测试全部结束
表格驱动测试
1.分离了测试数据和测试逻辑
2.明确了错误信息
3.可以部分失败
4.go语言的语法使得我们更易实践表格驱动测试
5.testing.T的使用
二、测试实例
1.以测试文件名必须以_test结尾,如:add_test
2.测试函数必须以Test开头,如:TestAdd
3.测试函数的参数为t *testing.T
4.进入测试文件所在目录执行命令:go test .即可执行所有的测试文件
示例:
func TestTriangle(t *testing.T) {
tests := []struct{ a, b, c int} {
{3, 4, 5},
{5, 12, 13},
{8, 15, 17},
{12, 35, 37},
{30000, 40000, 50000},
}
for _, tt := range tests {
if actual :=calTriangle(tt.a, tt.b); actual != tt.c {
t.Errorf("calcTriangle(%d, %d); got %d; expected %d", tt.a, tt.b, actual, tt.c)
}
}
}
三、代码覆盖率
命令行操作:
1.获取代码覆盖包:go test -coverprofile=c.out
2.查看代码覆盖报告:go tool cover -html=c.out
四、性能测试
1.测试函数必须以Benchmark开头,如:BenchmarkAdd
2.测试函数的参数为b *testing.B
3.代码执行的次数由go语言来计算,b.N
4.进入测试文件所在目录执行命令:go test -bench .即可执行所有的测试文件
示例:
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)
}
}
}
五、性能调优
命令如下:
1.输入go test -bench . -cpuprofile cpu.out生成cpu.out文件
2.命令行输入go tool pprof cpu.out打开交互命令行
3.在交互命令行中输入web,查看图
4.输入quit退出
六、FAQ
Q:windows环境使用命令:go tool pprof cpu.out进行性能调优出现如下报错:
Failed to execute dot. Is Graphviz installed? Error: exec: “dot”: executable file not found in %PATH%
R:缺少Graphviz
S:到地址http://www.graphviz.org/download/下载安装包,并配置环境变量