文章目录
- Go标准库中有一个名为
testing
的测试框架,可进行单元测试,命令是go test xxx
- 测试文件常是以
xx_test.go
命名,放在同一包下面
需求:完成两个复数相加 - 只需一个函数即完成了该任务。如何对该函数进行功能测试,如何快速进行单元测试呢?
1. 表格驱动型测试
- 鼠标放在函数上右键,选择
GO:Generate Unit Tests For Function
可生成xx_test.go
文件 - 单测
go test -run TestAdd
- 打印log信息 -
go test xxx_test.go -v
- 单测覆盖率(进行单元测试mock时,能覆盖的代码行数占总代码行数的比率)-
go test xxx_test -v -cover
2. 基准测试 - 函数名以Benchmark开头
go test -benchmem -run=. -bench=.
3. 代码
AddComplex.go文件内容
package utest
// Complex x + j*y
type Complex struct {
Real float32
Imag float32
}
func Add(x, y Complex) *Complex {
return &Complex{
Real: x.Real + y.Real,
Imag: x.Imag + y.Imag,
}
}
AddComplex_test.go文件内容
package utest
import (
"fmt"
"reflect"
"testing"
)
func TestAdd(t *testing.T) {
type args struct {
x Complex
y Complex
}
tests := []struct {
name string
args args
want *Complex
}{
// TODO: Add test cases.
{
name: "",
args: args{
x: Complex{
Real: 1.0,
Imag: 2.0,
},
y: Complex{
Real: 2.0,
Imag: 3.0,
},
},
want: &Complex{
Real: 3.0,
Imag: 5.0,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Add(tt.args.x, tt.args.y); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Add() = %v, want %v", got, tt.want)
}
})
}
}
func BenchmarkComplex(t *testing.B) {
for i := 0; i < t.N; i++ {
fmt.Sprintf("hello")
}
}