Golang表驱动测试方法
传统测试
- 测试数据和测试逻辑混在一起
- 出错信息不明确
- 一旦一个数据出错测试全部结束
表格驱动测试
- 分离的测试数据和测试逻辑
- 明确的出错信息
- 可以部分失败
- go语言的语法可以让我们更容易的实践表格驱动测试
Go语言中使用表格驱动测试的方案
创建一个待测试的功能函数:
package main
// JoinStr 拼接字符串
func JoinStr(strings ...string) string {
ret := ""
for _, item := range strings {
ret = ret + item + " "
}
return ret[:len(ret)-1]
}
编写测试表格:
package main
import "testing"
func TestJoinStr(t *testing.T) {
// 这个结构体是上面功能函数的参数
type args struct {
strings []string
}
// 用于测试的表格
tests := []struct {
name string // 表名
args args // 参数
want string // 期望值
}{
// 这里的数据都好似表格的内容
{name: "test1", args: args{strings: []string{"a", "b", "c"}}, want: "a b c"},
{name: "test2", args: args{strings: []string{"a", "b", "c", "d"}}, want: "a b c d"},
{name: "test3", args: args{strings: []string{"a", "b", "c", "d", "e"}}, want: "a b c d e"},
}
// 这里会遍历上面表格中定义的数据并将其作为功能函数的参数进行调用,并把功能函数的返回值与表格中定义的返回值进行校验
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := JoinStr(tt.args.strings...); got != tt.want {
t.Errorf("JoinStr() = [%v], want [%v]", got, tt.want)
}
})
}
}
执行结果:
➜ 4.表驱动测试方法 git:(main) ✗ go test -v main.go main_test.go
=== RUN TestJoinStr
=== RUN TestJoinStr/test1
=== RUN TestJoinStr/test2
=== RUN TestJoinStr/test3
--- PASS: TestJoinStr (0.00s)
--- PASS: TestJoinStr/test1 (0.00s)
--- PASS: TestJoinStr/test2 (0.00s)
--- PASS: TestJoinStr/test3 (0.00s)
PASS
ok command-line-arguments 0.607s