编写单元测试用例
- 文件名必须以'_test.go'结尾
- 必须import "testing"这个包
- 测试用例会按照源代码中写的顺序依次执行
- 测试函数'TestXxx(t *testing.T)'中的参数是‘testing.T’,我们可以用该类型来记录错误或者是测试状态
- 测试格式:‘func TestXxx(t *testing.T)’,'Xxx'部分可以为任意的字母数字组合,但是首字母不能是小写字母[a-z]
- 函数中通过调用'testing.T'的'Error'、'Errorf'、'FailNow'、'Fatal'、‘FatalIf’方法,说明测试用例不通过,调用''Log'方法用来记录测试的信息
编写压力测试
- 压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
func BenchmarkXXX(b *testing.a) {...} - go test 不会默认执行压力测试的函数,如果要执行压力测试需要带上参数。-test.bench,语法: -test.bench="test_name_regex" ,例如 go test -test.bench=".*"表示测试全部的压力测试函数
- 在压力测试用例中,需要才循环体内使用testing.B.N,以使测试用例正常运行
- 文件名也必须以_test.go结尾
单元测试用例
源码
package gotest
import(
)
func Add(a, b float64) float64 {
return a + b
}
测试用例
package gotest
import (
"testing"
)
func Test_Add_1(t *testing.T) {
if i := Add(6,2); i != 8 {
t.Error("fail")
} else {
t.Log("pass")
}
}
func Test_Add_2(t *testing.T) {
if i := Add(6,2); i == 8 {
t.Log("pass")
} else {
t.Error("fail")
}
}
运行测试用例
go test -v
测试用例执行结果
=== RUN Test_Add_1
--- PASS: Test_Add_1 (0.00s)
gotest_test.go:11: pass
=== RUN Test_Add_2
--- PASS: Test_Add_2 (0.00s)
gotest_test.go:17: pass
PASS
ok github.com/shadowsocks/shadowsocks-go/sample-config/gotest 0.001s
压力测试用例
源码
package gotest
import(
"testing"
)
func Benchmark_Add(b *testing.B) {
for i := 0; i < b.N ; i++ {
Add(3,4)
}
}
func Benchmark_TimeConsumingFunction(b *testing.B) {
b.StopTimer() //调用该函数停止压力测试的时间计数
//做一些初始化工作,这些时间不影响我们测试函数本身的性能
b.StartTimer()
for i := 0; i < b.N; i++ {
Add(5,6)
}
}
运行结果
Benchmark_Add-4 2000000000 0.38 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.38 ns/op
PASS
ok github.com/shadowsocks/shadowsocks-go/sample-config/gotest 1.594s
第一条显示Benchmark_add-4执行了20亿次,每次执行时间为0.38纳秒
第二条也一样
有疑问加站长微信联系(非本文作者)