Golang 测试用例编写

单元测试

文件原则

  1. 文件名以 "_test.go" 结尾
  2. 必需导入 "testing" 包
  3. 所有测试用例函数以 "Test" 开头
  4. 执行顺序为源码中的函数顺序
  5. 测试用例函数的参数为 "testing.T",可记录测试信息
  6. 测试用例函数名称[TestXXX],其中 XXX 必需为大写字母开头,即能导出
  7. testing.T中的[Error,Errorf,FailNow,Fatal,FatalIf]函数都表示测试不通过; Log函数,可以输出测试信息

测试操作

go test 会在当前目录下查找 _test.go 文件,然后执行里面的 TestXXX 函数

默认 go test 不会显示测试通过的用例,除非添加参数 [ -v ]

压力测试

原则

  1. 基本原则与单元测试相同
  2. 其中第3点,测试函数的名称开头为: Benchmark
  3. 其中第5点,函数的参数为: testing.B

操作

go test 默认不执行压力测试,需要添加 -test.bench 参数,支持正则

语法:

go test -test.bench="压力测试函数名" # 其中压力测试函数执行正则

go test -test.bench=".*" #表示所有压力测试函数

例子

func Benchmark_Division(b *testing.B) {
for i := 0; i < b.N; i++ { //use b.N for looping
Division(4, 5)
}
}

func Benchmark_TimeConsumingFunction(b *testing.B) {
b.StopTimer() //调用该函数停止压力测试的时间计数
//做一些初始化的工作,例如读取文件数据,数据库连接之类的,
//这样这些时间不影响我们测试函数本身的性能
b.StartTimer() //重新开始时间
for i := 0; i < b.N; i++ {
Division(4, 5)
}
}