testing是golang自带的测试库。
testting规则:
在待测试功能所在文件的同级目录中创建一个以_test.go结尾的文件。
测试函数名必须是TestXxxx这个形式,而且Xxxx必须以大写字母开头,另外函数带有一个*testing.T类型的参数。
// 单元测试,主入口,所有testing.T会先执行TestMain方法
func TestMain(m *testing.M) {
fmt.Println("do main")
m.Run()
}
// 单元测试
func TestAdd(t *testing.T) {
result := Add(1, 2)
if result != 3 {
t.Errorf("Add(1, 2) = %d; want 3", result)
}
}
func Add(i, j int) int {
return i + j
}
// 单元测试
func TestCompute(t *testing.T) {
type args struct {
i int
j int
method string
}
tests := []struct {
name string
args args
want int
}{
{
name: "加法",
args: args{i: 1, j: 2, method: "+"},
want: 3,
},
{
name: "减法",
args: args{i: 1, j: 2, method: "-"},
want: -1,
},
{
name: "乘法",
args: args{i: 1, j: 2, method: "*"},
want: 2,
},
{
name: "除法",
args: args{i: 1, j: 2, method: "/"},
want: 1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := Compute(tt.args.i, tt.args.j, tt.args.method)
if got != tt.want {
t.Errorf("Compute() got = %v, want %v", got, tt.want)
}
})
}
}
func Compute(i, j int, method string) int {
switch method {
case "+":
return i + j
case "-":
return i - j
case "*":
return i * j
case "/":
return i / j
default:
return i + j
}
}