测试

多做测试 少做调试

传统测试 vs 表格驱动测试

传统测试

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

表格驱动测试

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

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

add_test.go

命令行运行测试用例

go test .   

测试用例代码

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