这篇文章记述一下golang中的测试方法。

与很多编程语言不同的是,在golang中你的测试函数会写在一个*_test.go文件中。 编译工具go build不会编译*_test.go文件,它们属于golang的测试工具go test。 运行时,切换到对应的package目录,go test会去找该目录下所有以_test.go结尾的文件, 并执行它们。你还可以用go test -v来查看详细的测试函数执行信息。

对于一个包含多个函数的文件a.go,它的测试文件我们一般会将其命名为a_test.go,这样 看起来简单明了。

接下来我们介绍一下测试函数的写法。比如对于函数:

func even(num int) bool {
    if num%2 == 0 {
        return true
    } else {
        return false
    }
}

我们一般这样写对应的测试函数:

func TestEven(t *testing.T) {
    var tests = []struct{
        input  int
        result bool
    }{
        {1, false},
        {2, true},
    }

    for i, test := range tests {
        if got := even(test.input); got != test.result {
            t.Errorf("[%d]: got: %v  expected: %v", i, got, test.result)
        }
    }
}

我们定义一个[]struct类型的变量tests用来存放测试用例,这样写的好处就是对测试用例的增删改查操作非常方便。 结构体的内容根据实际情况定义,一般为一个输入字段加一个输出字段。测试的步骤非常简单,遍历所有的测试用例, 把输入字段传入测试函数,将得到的结果与期待的结果进行对比。两者一致说明测试通过,反之则要判断原因,是测试用例 不对,还是测试函数出了问题。

这种测试一般用来白盒测试。白盒测试是看着源代码写测试用例,所以要注意覆盖函数所有的分支,包括所有的if-else,for,switch等。

以上。