You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
funcTestIntegerStuff(t*testing.T) {
Convey("Given some integer with a starting value", t, func() {
x:=1Convey("When the integer is incremented", func() {
x++Convey("The value should be greater by two", func() {
x++So(x, ShouldEqual, 3)
})
Convey("The value should be greater by one", func() {
So(x, ShouldEqual, 2)
})
})
})
}
goconvey的用途和实现
Go 语言官方test工具已经非常令人满意了,使用表格法可以很好的做单元测试。但是在做业务逻辑上的组合测试(也不是集成测试,不知道有没有名次描述这个)的时候就有点麻烦,比如我们要测试1v1呼叫后的几个action有没有问题。可以想到这么几条测试案例
这里我们真正要测试的操作都必须有一个【业务前提】:A呼叫了B。 (这里强调业务前提是这里介绍的不是tear up和tear down那种测试方法)
我们可以这么写
这样写总比写三次create single call好一点,但是如果想要多层嵌套呢?如果create single call返回了更多的参数呢?打表法更适合简单的参数组合多样的测试,在这种场景下就不是很好用了。
这里介绍一个神器 goconvey: 不仅仅可以解决上面重复创建1v1通话的问题,还有更好的UI,WEB界面,断言方法等等......
不过这篇文档只是讲解go convey的测试逻辑。
go convey官方demo如下
注意两个So语句的不同,第二个So并没有受到上面一个Convey的影响!也就是说测试总是从Root结点出发,一直跑到某一个叶子结点,有多少个叶子结点就会重复跑Root结点多少次。这里可以看上面的测试案例,仔细体会一下
我们上面说的业务场景的测试就可以改成这样
这样测试逻辑清晰多了吧。而且create single call也只写了一次,测了三个场景。
实现
goconvey的实现非常简单,核心实现只需要100行,和一个叫gls的context包,这个包也非常神奇,有兴趣的自己看下这个包。
实现上比较trace的点
The text was updated successfully, but these errors were encountered: