单元测试 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)
        })
    })
}

运行结果

单元测试Convey

果然测试用例全部通过,但是!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

这个结果才是我要的。那么对比两次的写法,Convey函数如果并列的话,会执行多次,一般这会对测试结果产生影响。要像第二种写法一样,层层包裹才能正常执行

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!