golang的BDD测试工具goconvey
goconvey
单元测试的重要性是不言而喻的,好的单元测试可以增强代码的健壮性。写一手好的单元测试是优秀程序员的必备技能。goconvey是比较优秀的go语言单元测试框架。并且goconvey特别适合于BDD(行为驱动开发)
goconvey的特性
- 直接与go test集成
- 全自动web UI, 可以看到web界面
- 大量回归测试
- 可以显示测试覆盖率
- 可读的彩色控制台输出(任何管理者都能理解,不管是不是)
- 测试代码生成器
使用方法
安装获取goconvey
go get github.com/smartystreets/goconvey
具体例子
package package_name
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func TestSpec(t *testing.T) {
// Only pass t into top-level Convey calls
Convey("Given some integer with a starting value", t, func() {
x := 1
Convey("When the integer is incremented", func() {
x++
Convey("The value should be greater by one", func() {
So(x, ShouldEqual, 2)
})
})
})
}
func TestSample(t *testing.T) {
// Only pass t into top-level Convey calls
Convey(" 1 + 1= 2", t, func() {
x := 1
y := 1
So(x+y, ShouldEqual, 2)
})
}
BDD
goconvey特别适合于BDD(行为驱动开发),那么何为BDD?
软件开发的过程十分复杂,从需求收集到需求分析,再到代码编写这一整套流程,很容易出现沟通问题。由于沟通出现的问题更是十分常见。有时候程序员和产品经理可能还会大打出手。在这种背景下提出了行为驱动开发。
行为驱动开发(Behavior Driven Development,BDD)借鉴了敏捷和精益实践,让敏捷研发团队尽可能理解产品经理或业务人员的产品需求,并在软件研发过程中及时反馈和演示软件产品的研发状态,让产品经理或业务人员根据获得的产品研发信息及时对软件产品特性进行调整。BDD帮助敏捷研发团队把精力集中在识别、理解和构建跟业务目标有关的产品特性上面,并让敏捷研发团队能够确保识别出的产品特性能够被正确设计和实现出来。
BDD的产品研发流程如下:
-
产品经理(业务人员)通过具体的用户故事使用场景来告诉软件需求分析人员他(她)想要什么样的软件产品。使用软件产品的使用场景来描述软件需求可以尽可能的避免相关人员错误理解软件需求或增加自己的主观想象的需求。
-
软件需求分析人员(BA)和研发团队(研发人员、测试人员)一起对产品经理(业务人员)的用户故事进行分析,并梳理出具体的软件产品使用场景举例,这些场景举例使用结构化的关键字自然语言进行描述,例如中文、英文等。
-
研发团队使用BDD工具把用户故事场景文件转化为可执行的自动化测试代码,研发人员运行自动化测试用例来验证开发出来的软件产品是否符合用户故事场景的验收要求。
-
测试人员可以根据自动化测试结果开展手工测试和探索性测试。
-
产品经理(业务人员)可以实时查看软件研发团队的自动化测试结果和BDD工具生成的测试报告,确保软件实现符合产品经理(业务人员)的软件期望。
这样做的本质目的是让产品经理,需求分析和研发人员之间充分理解,通过BDD工具打通各自的理解。那么如何去打通?关键就是研发团队使用BDD工具把场景文字转化为可以执行的自动化测试代码。goconvey可以帮助我们解决这样的问题。
--- PASS: TestSample (0.00s)
PASS
ok command-line-arguments 0.150s
MacBook-Pro:bdd zhouqi$ go test bdd_test.go -v
=== RUN TestSpec
Given some integer with a starting value
When the integer is incremented
The value should be greater by one ✔
1 total assertion
--- PASS: TestSpec (0.00s)
=== RUN TestSample
1 + 1= 2 ✔
上图是goconvey所执行的结果。所有的测试通过意味着满足了产品的基本需求。convey可以为每一步测试添加描述语言,并且通过结果可以看出来,是否满足了需求。