goconvey是一款针对Golang的测试框架,可以管理和运行测试用例,同时提供了丰富的断言函数,并支持很多 Web 界面特性。
import “github.com/smartystreets/goconvey”
顶层Convey:由测试描述、testing.T,行为函数组成。
Convey(description string, t *testing.T, action func())
其他层Convey:
Convey(description string, action func())
值断言:判断actual值是否符合预期。
func So(actual any, assert Assertion, expected ...any)
actual:实际值。
Assertion:断言条件,一般为ShouldXXX组成,
expect:预期值。
由树形结构进行遍历
Convey A
So 1
Convey B
So 2
Convey C
So 3
执行顺序:1 A->B 、2 A->C
func TestGetSumScore(t *testing.T) {
Convey("start x is 0", t, func() {
x := 0
Convey("x++", func() {
x++
So(x, ShouldEqual, 1)
})
})
}
GetSumScore函数实现:
type Student struct {
ID int64
Name string
Age int8
Major string
Score int
}
// 返回这些学生的分数总和
func GetSumScore(students []Student) int {
total := 0
for _, v := range students {
total += v.Score
}
return total
}
测试代码:
func TestGetSumScore(t *testing.T) {
convey.Convey("init students", t, func() {
students := []Student{
{Name: "yi", Score: 90},
{Name: "w", Score: 100},
}
score := GetSumScore(students)
convey.Convey("GetSumScore", func() {
convey.So(score, convey.ShouldEqual, 190)
})
convey.Convey("Change students[0].score", func() {
students[0].Score = 10
score := GetSumScore(students)
convey.So(score, convey.ShouldEqual, 110)
})
})
}