0%

Go 单元测试

Go 单元测试

testify 断言库

安装

1
2
go get github.com/stretchr/testify/assert
go get github.com/stretchr/testify/require

assert VS require

Table Driven Unit Test

多用例场景推荐使用 Table Driven Unit Test。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
func TestFunctionUnderTest(t *testing.T) {
testCases := []struct {
name string
input string
expect string
wantErr bool
errContains string
}{
{name1, input1, expect1, wantErr1, errContains1},
{name2, input2, expect2, wantErr2, errContains2},
{name3, input3, expect3, wantErr3, errContains3},
}

for _, tt := range testCases {
tt := tt //如果需要子用例间并发,则加上这两行(局部变量副本保证安全并发)
t.Run(tt.name, func(t *testing.T) {
t.Parallel() //如果需要子用例间并发,则加上这两行
actual, err := FunctionUnderTest(tt.input)
if tt.wantErr {
require.ErrorContains(t, err, tt.errContains)
assert.Nil(t, actual)
} else {
compareFunction(t, tt.expect, actual)
}
})
}
}