Golang自带的测试库testing的使用

63 阅读1分钟

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
	}
}