go test 单元测试
go test 注释后必须多空出一行,也就是 // 下一行要预留为空行,否则go解析的时候会把下一行解析成注释
1. 条件build 举例
a.go
// +build !test ...todo code
b.go
//+build test ...todo code
上面两个go文件,在执行 go build -tags "test" 的时候,实际上是只执行 b.go
+build 是值得条件变异,test指的是 -tags 后的内容 符号 ! 是 “非” 的意思
2. go test 最大操作方位:包 包
//在packageName目录下,包与包用空格间隔 go test -tags "test" funnel/tasks net/http
上述代码中,funnel/task 和 net/http 分别是两个包
3. go test 最小操作范围: func
go test -run=TestFunctionName //测试当前包下面的TestFunctionName函数
上述内容中,TestFunctionName 是函数名,函数测试必须遵循下面几点
- 测试文件需要与被测试文件保持同级目录(这也是go test中所有测试用例的规范):demo.go demo_test.go
- 文件命名规则:被测试文件的文件名_test.go
- 测试函数明明:Test+测试场景的函数名(t *testing.T)
- 一个test.go文件内,可以包含多个测试场景
- 一个包中的抽象出的公共测试函数,以包名_test.go命名文件
4. go test 常用命令列表
- -v 无论用力是否测试通过,都会显示结果,不加 "-v" 表示只显示未通过的用例
- -run 测试某个函数比如 go test -run = TestFunctionName
- -cover 输出测试代码覆盖率
- -c 变异pkg.test 但不执行
- -i 安装测试依赖的package包,但不运行
- -o 制定用于测试的课执行文件的名称
- t.Log, t.Logf 打印正常信息
- t.Error,t.Errorf 打印错误信息