单元测试 Convey
单元测试在保证我代码健壮性的同时也为编程带来了一些乐趣(由于正负反馈,让简单的写代码变成了积极的互动)。在选择go里面的测试工具的时候,没有找到类似php中Phpunit一样灵活强大框架有点小失落,看到大家都在用Convey,我也试试。
对于一个新手来说,不了解它的话也许会掉进下面这个坑里面去,Convey莫名其妙的执行了两次。我就两次掉进去,现在一定要记录下来,防止再次犯错。
首选来看一下这一段”一本正经”的代码,按照期望两个测试用例都会通过(多么完美的计划啊)
func TestConvey1(t *testing.T) {
var n = 0
//先设置一个顶层的测试块,记得第二个参数一定是testing.T
Convey("熟悉一下convey", t, func() {
//记录当前函数执行的次数
n++
t.Log("执行了" + strconv.Itoa(n) + "次")
//然后在测试块中写两个测试用例
Convey("测试1", func() {
So(1, ShouldEqual, 1)
})
Convey("测试2", func() {
So(2, ShouldEqual, 2)
})
})
}
运行结果
果然测试用例全部通过,但是!but!输出了执行1了次
,紧接着又输出了执行了2次
,这就不对了吧。应该只会输出一次的呀!
然后再看看另外一种写法
func TestConvey2(t *testing.T) {
var n = 0
Convey("熟悉一下convey", t, func() {
n++
t.Log("执行了" + strconv.Itoa(n) + "次")
Convey("测试1", func() {
So(1, ShouldEqual, 1)
Convey("测试2", func() {
So(2, ShouldEqual, 2)
})
})
})
}
运行结果
这个结果才是我要的。那么对比两次的写法,Convey函数如果并列的话,会执行多次,一般这会对测试结果产生影响。要像第二种写法一样,层层包裹才能正常执行
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: