go语言test



文件命名规则:

Go本身提供了一套轻量级的测试框架。符合规则的测试代码会在运行测试时被自动识别并

执行。

单元测试源文件的命名规则如下:在需要测试的包下面创建以“_test”结尾的go文件,形

[^.]*_test.go

单元测试函数分类:

Go的单元测试函数分为两类:功能测试函数和性能测试函数,分别为以TestBenchmark为函数名前缀并以*testing.T为单一参数的函数。下面是测试函数声明的例子:

                funcTestAdd1(t *testing.T)

                funcBenchmarkAdd1(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

 

性能测试

接下来我们介绍性能测试。先看一个例子:

func BenchmarkAdd(b *testing.B) {
       for
i := 0; i < b.N; i++{
             
Add(1, 2)
      
}
}

性能单元测试的执行与功能测试一样简单,只不过调用时需要增加-test.bench参数而已,

具体代码如下所示:

$ go testtest.benchadd.go

PASS

oksimplemath0.013s

可以看出,性能测试与功能测试代码相比,最大的区别在于代码里的这个for循环,循环b.N

次。写这个for循环的原因是为了能够让测试运行足够长的时间便于进行平均运行时间的计算

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页