文件命名规则:
Go本身提供了一套轻量级的测试框架。符合规则的测试代码会在运行测试时被自动识别并
执行。
单元测试源文件的命名规则如下:在需要测试的包下面创建以“_test”结尾的go文件,形
如[^.]*_test.go。
单元测试函数分类:
Go的单元测试函数分为两类:功能测试函数和性能测试函数,分别为以Test和Benchmark为函数名前缀并以*testing.T为单一参数的函数。下面是测试函数声明的例子:
func TestAdd1(t *testing.T)
func BenchmarkAdd1(t *testing.T)
测试工具会根据函数中的实际执行动作得到不同的测试结果。
功能测试函数会根据测试代码执行过程中是否发生错误来返回不同的结果
性能测试函数仅仅打印整个测试过程的花费时间
功能测试
本例中我们使用t.Errorf()函数打印了一句错误信息后中止测试。虽然
testing.T包含很多其他函数,但其实用t.Errorf()我们也能覆盖大部分的测试代码编写场景了:
package simplemath
import "testing"
func TestAdd(t *testing.T) {
r := Add(1, 2)
if r != 3 {
t.Errorf("Add(1, 2)failed. Got %d, expected 3.", r)
}
}
执行功能单元测试非常简单,直接执行gotest命令即可。下面的代码用于对整个
simplemath包进行单元测试:
$ go test simplemath
PASS
oksimplemath0.013s
指定文件、函数进行测试:
1,测试单个文件,一定要带上被测试的原文件
go test -v wechat_test.go wechat.go
2,测试单个方法
go test -v -test.run TestRefreshAccessToken
性能测试
接下来我们介绍性能测试。先看一个例子:
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++{
Add(1, 2)
}
}
性能单元测试的执行与功能测试一样简单,只不过调用时需要增加-test.bench参数而已,
具体代码如下所示:
$ go test–test.benchadd.go
PASS
oksimplemath0.013s
可以看出,性能测试与功能测试代码相比,最大的区别在于代码里的这个for循环,循环b.N
次。写这个for循环的原因是为了能够让测试运行足够长的时间便于进行平均运行时间的计算