Go语言通过testing包提供自动化测试功能。
Go testing 库 testing.T 和 testing.B 简介:
testing.T
判定失败接口
Fail 失败继续
FailNow 失败终止
打印信息接口
Log 数据流 (cout 类似)
Logf format (printf 类似)
SkipNow 跳过当前测试
Skiped 检测是否跳过
综合接口产生:
Error / Errorf 报告出错继续 [ Log / Logf + Fail ]
Fatel / Fatelf 报告出错终止 [ Log / Logf + FailNow ]
Skip / Skipf 报告并跳过 [ Log / Logf + SkipNow ]
testing.B
testing.B 拥有testing.T 的全部接口。
SetBytes( i uint64) 统计内存消耗。
SetParallelism(p int) 制定并行数目。
StartTimer / StopTimer / ResertTimer 操作计时器
testing.PB
Next() 接口 。 判断是否继续循环
Go语言测试约定规则
1.一般测试func TestXxx(*testing.T)
测试行必须Test开头,Xxx为字符串,第一个X必须大写的[A-Z]的字幕,一般Xxx为被测试方法的函数名。
2.性能测试func BenchmarkXxx(*testing.B)
性能测试用Benchmark标记,Xxx同上。
3.测试文件名约定
go语言测试文件名约定规则是必须以_test.go结尾,放在相同包下.
示例:a.go
package main
import “fmt”
func add(x, y int) int {
return x + y
}
func main() {
fmt.Println(add(1,2))
}
单元测试示例:a_test.go
package main
import “testing”
func TestAdd(t *testing.T) {
if add(1,2) != 3 {
t.Error(“test foo:Addr failed”)
} else {
t.Log(“test foo:Addr pass”)
}
}
包内测试只要运行命令 go test,就能自动运行符合规则的测试函数。
执行: go test
结果:
PASS
ok _/C_/Go/Workspace/linshi 0.093s
性能测试示例:a_test.go
package main
import “testing”
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
add(1, 2)
}
}
执行:go test -v -test.bench=”.*” -count=5
结果:
goos: windows
goarch: amd64
//Benchmark名字-CPU 循环次数 平均每次执行时间
BenchmarkAdd-4 2000000000 0.38 ns/op
BenchmarkAdd-4 2000000000 0.36 ns/op
BenchmarkAdd-4 2000000000 0.35 ns/op
BenchmarkAdd-4 2000000000 0.35 ns/op
BenchmarkAdd-4 2000000000 0.35 ns/op
//表示全部通过
PASS
ok _/C_/Go/Workspace/linshi 3.867s
补充一下go test参数说明,列举几个常用的
go test [-c] [-i] [build flags] [packages] [flags for test binary]
-c : 编译go test成为可执行的二进制文件,但是不运行测试。
-i : 安装测试包依赖的package,但是不运行测试。
-test.v : 是否输出全部的单元 测试用例 (不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例。
-test.run pattern: 只跑哪些单元测试用例
-test.bench patten: 只跑那些性能测试用例
-test.benchmem : 是否在性能测试的时候输出内存情况
-test.benchtime t : 性能测试运行的时间,默认是1s
-test.cpuprofile cpu.out : 是否输出cpu性能分析文件
-test.memprofile mem.out : 是否输出内存性能分析文件
小结:
对于测试http和mysql时需要的url,ip,port,username,password等在_test文件中不需要,直接测试相应的方法函数即可。
更多内容请关注每日编程,每天进步一点。