Go Test
这篇文章记述一下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等。
以上。