GO单元测试

基础单元测试

参考博客

go test

Go语言中的测试依赖go test命令
在包目录内,所有以**_test.go**为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中
在*_test.go文件中有三种类型的函数
使用go test -cover查看测试覆盖率

类型 格式 作用
测试函数 函数名前缀为Test 测试程序的一些逻辑行为是否正确
基准函数 函数名前缀为Benchmark 测试函数的性能
示例函数 函数名前缀为Example 为文档提供示例文档

基础代码

1
2
3
4
5
6
7
package add

// Add 添加方法
func Add(a, b int) int {
return a + b
}

测试函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 单个测试用例 go test -v 运行
func TestAdd(t *testing.T) {
ret := Add(1, 2)
want := 3
if ret != want {
t.Errorf("测试不通过 期望:%v 结果:%v", want, ret)
}
}

// 测试组 子测试 go test -v 运行全部
// go test -v -run=t1 只运行t1测试
func Test2Add(t *testing.T) {
type tt struct {
num1 int
num2 int
want int
}
m := map[string]tt{
"t1": {num1: 1, num2: 2, want: 3},
"t2": {num1: 4, num2: 2, want: 6},
"t3": {num1: 5, num2: 5, want: 10},
}
for k, v := range m {
t.Run(k, func(t *testing.T) {
ret := Add(v.num1, v.num2)
if ret != v.want {
t.Errorf("期望:%#v, 结果:%#v", v.want, ret)
}
})
}
}

基准测试

1
2
3
4
5
6
// 基准测试 go test -bench=Add -benchmem 运行
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(i, i+1)
}
}

性能比较

1
2
3
4
5
6
7
8
9
// 性能比较 go test -bench=. 运行所有的
// go test -bench=1000-16 -benchtime=2s 运行2s测试1000
func benchmarkAdd(b *testing.B, n1, n2 int) {
Add(n1, n2)
}

func Benchmark10(b *testing.B) { benchmarkAdd(b, 10, 10) }
func Benchmark100(b *testing.B) { benchmarkAdd(b, 100000000, 100000000) }
func Benchmark1000(b *testing.B) { benchmarkAdd(b, 100000000, 100000000) }

相关文章

GO基础

GO常用标准库

GO Model

GO操作Elasticsearch