单元测试
golang系统包就继承了单元测试 这里演示表格驱动的方式,进行单元测试 示例: 待测试函数
package test
func Add(a, b int) int {
return a + b
}
单元测试相关代码是可以自动生成的,选中测试代码,点击图示 同目录生成 add_test.go 文件,内有表格驱动测试模板,看代码即可: 需要说明的几点: TestMain是可选函数,如果写上就是测试的入口,m.Run()进行测试的运行,并返回状态码,0代表成功,其他都为失败
package test
import (
"fmt"
"os"
"testing"
)
func TestAdd(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
{"t1",args{1,2},3},
{"t2",args{3,5},8},
{"t3",args{3,5},9},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Add(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Add() = %v, want %v", got, tt.want)
}
})
}
}
func TestMain(m *testing.M) {
fmt.Println("begin")
os.Exit(m.Run())
fmt.Println("end")
}
使用go test -v 运行
begin
=== RUN TestAdd
=== RUN TestAdd/t1
=== RUN TestAdd/t2
=== RUN TestAdd/t3
add_test.go:26: Add() = 8, want 9
--- FAIL: TestAdd (0.00s)
--- PASS: TestAdd/t1 (0.00s)
--- PASS: TestAdd/t2 (0.00s)
--- FAIL: TestAdd/t3 (0.00s)
FAIL
exit status 1
FAIL coolcar/test 0.699s
压力测试
func BenchmarkAdd(b *testing.B) {
for i:=0;i< b.N;i++ {
Add(Add(Add(Add(i,i+1),i),i),i)
}
}
运行:
$ go test -bench=.
goos: windows
goarch: amd64
pkg: coolcar/test
BenchmarkAdd-8 1000000000 0.746 ns/op
PASS
ok coolcar/test 1.090s
|