JOE'S BLOG

好记性不如烂键盘

0%

GO语言测试&文档&调试

测试

多做测试 少做调试

传统测试 vs 表格驱动测试

传统测试

  • 测试数据和测试逻辑混在一起
  • 出错信息不明确
  • 一旦一个数据出错测试全部结束

表格驱动测试

  • 分离测试数据和测试逻辑
  • 明确的出错信息
  • 可以部分失败

go语言 测试文件跟与要测试的文件同目录,文件名规则如下

1
add_test.go

命令行运行测试用例

1
go test .   

测试用例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "testing"

func TestAdd(t *testing.T) {
tests := []struct {a, b, c int}{
{1,2,3},
{2,3,5},
{4,6,10},
{3,4,0},
{19,1,20},
}

for _, tt := range tests {
if actual := add(tt.a, tt.b); actual != tt.c {
t.Errorf("add(%d,%d); "+"got %d; expected %d",tt.a,tt.b,actual,tt.c)
}
}
}

代码覆盖率

命令行运行
go test -coverprofile=c.out

一般生成的文件很难理解

使用一个工具

go tool cover -html=c.out

性能测试

可以使用命令行
go test -bench .

func BenchmarkSubstr(b *testing.B) {
a := 19999
c := 123123
for i := 0; i < b.N; i++ {
add(a, c)
}
}

进行性能调优

生成一个文件
go test -bench . -cpuprofile=cpu.out

运行这个
go tool pprof cpu.out
有很多功能 使用最简单的 web

如果想用web的话需要安装一个包
Download
然后查看是哪一步占用的时间多

文档

godoc -http :6060
在本地生成一个文档,有go语言的文档,也有自己的写的代码的文档

go语言注释可以随意写
go doc fmt.Println
打印文档注释

gdb调试

go build -gcflags “-N -l” gdbfile.go