- 规则
- 文件名以_test.go结尾
- 汇报PASS或FAIL, 平均执行时间
- 忽略main函数, 当作库测试
- main特权函数 log.Fatal()和os.Exit()会阻止跟踪过程
- 包测试循环依赖时,建立外部测试包
- 导出内部成员用于测试的后门成员声明,放在export_test.go内
- 机制
- 扫描*_test.go
- 生成临时main包来调用,再编译、运行、汇报, 最后清空临时文件
- Test函数 # t用于汇报结果和日志
- func TestF(t *testing.T) {}
- benchmark函数 # 基准测试,性能
- b增加了成员N指定执行次数, 增加了性能检测方法
- 基准测试时初始化代码放循环外面,它的执行时间不加到每次迭代时间中。普通Test做不到
- 用go test -bench=.运行
- 报告中 f-8 1000000 1035 ns/op 分别代表GOMAXPROCS=8, 执行100000次,平均每次1035ns
- 基本使用
-
func BenchmarkF(b *testing.B) {
for i := 0; i < b.N; i++{
f()
}
}
- 相对比较, 如数量级、找最佳缓冲区大小、选算法策略
-
func benchmark(b *testing.B, size int){}
func Benchmark10(b *testing.B) {benchmark(b, 10)}
func Benchmark100(b *testing.B) {benchmark(b, 100)}
- Example函数 # 示例,无参无结果。
- 用处
- 可举例子作为文档
- 结尾注释 // output: 验证终端输出
- 实验代码
-
func ExampleF() {
fmt.Print("a")
// output: aa
}