1 GoConvey 的特性
- 直接集成 Go 内置测试工具,比如可以直接使用
go test
- 大量的回归测试套件
- 提供可读的,彩色的控制台输出
- 完全自动化的 Web UI
- 测试代码生成器
- 桌面提醒(可选)
- 自动在终端中运行自动测试脚本
- 可立即在 Sublime Text 中打开测试问题对应的代码行 (some assembly required)
2 下载安装
$ go get github.com/smartystreets/goconvey $ $GOPATH/bin/goconvey
安装成功将看到如下输出:
yuzhou@yuzhou:~/GoProjects$ go get github.com/smartystreets/goconvey/convey go: downloading github.com/smartystreets/assertions v1.2.0 go: downloading github.com/jtolds/gls v4.20.0+incompatible go: downloading github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 go get: added github.com/smartystreets/goconvey v1.7.2
3 如何使用
结构如下:
- 创建一个
utils.go
文件,写一个整数求和的 Sum 函数:
package utils func Sum(nums ...int) int { sum := 0 for i := 0; i < len(nums); i++ { sum += nums[i] } return sum }
然后创建一个单元测试的文件 utils_test.go
文件:
package utils import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestSum(t *testing.T) { Convey("Test Sum", t, func() { Convey("1 + 2 + 3 + 4 + 5", func() { So(Sum(1, 2, 3, 4, 5), ShouldEqual, 15) }) Convey("1 + 2022", func() { So(Sum(1, 2022), ShouldEqual, 2023) }) }) }
- 第 6 行中 以
.
导入库的方式简化调用。 - 第 9 行代码,单元测试函数的命名及注意事项和内置库
testing
要求一致(比如测试函数以 Test_开头,传入参数为*testing.T
)。 - 函数体中第一层 Convey 提供 3 个参数:
Test Sum
(说明测试的名称)、t
和func()
。 - 嵌套的 Convey 层提供两个参数:
1 + 2 + 3 + 4 + 5
(说明测试的名称)和func()
。 - 使用 So 来判断预期值和输出,这里使用
ShouldEqual
。
package utils import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestSum(t *testing.T) { Convey("Test Sum", t, func() { Convey("1 + 2 + 3 + 4 + 5", func() { So(Sum(1, 2, 3, 4, 5), ShouldEqual, 15) }) Convey("1 + 2022", func() { So(Sum(1, 2022), ShouldEqual, 2023) }) }) }
因为 GoConvey 很好的集成了 Go 原生 tes 在终端中执行 go test -v
命令,得到如下结果,测试通过:
=== RUN TestSum Test Sum 1 + 2 + 3 + 4 + 5 ✔ 1 + 2022 ✔ 2 total assertions --- PASS: TestSum (0.00s) PASS ok utils.go 0.012s
在终端着有着非常人性化带有彩色的界面,如图所示: