编程并不容易;即使是最好的程序员也不可能写出每次都能完全按预期工作的程序。因此,软件开发过程中的一个重要部分就是测试。为我们的代码编写测试是保证质量和提高可靠性的好方法。
Go包括一个特殊的程序,可以使编写测试更容易,所以让我们为上一章做的包创建一些测试,我们在上一章中制作了一个包。在第11章的数学文件夹中 第11章中的数学文件夹中,创建一个名为 math_test.go
的新文件。包含以下内容:
package math
import "testing"
func TestAverage(t *tesing.T) {
var v float64
v = Average([]float64{1,2})
if v != 1.5 {
t.Error("Expected 1.5, got", v)
}
}
然后运行命令:
go test
go test
命令将在当前文件夹的任何一个文件中寻找任何测试并运行它们。文件中的任何测试并运行它们。测试是 识别的方法是以Test字样开始一个函数 并接受一个*testing.T
类型的参数。本例中,由于我们正在测试Average函数,我们将测试函数命名为TestAverage
。
λ go test
PASS
ok sort.go 0.147s
一旦我们有了测试功能的设置,我们就编写测试使用我们要测试的代码。在这个例子中,我们知道[1,2]的平均数应该是1.5,所以这就是我们的检查。可能是一个好主意,测试许多不同的数字的组合,所以让我们稍微改变一下我们的测试程序:
package math
import "testing"
type testpair struct {
values []float64
average float64
}
var tests = []testpair{
{ []float64{1,2}, 1.5 },
{ []float64{1,1,1,1,1,1}, 1 },
{ []float64{-1,1}, 0 },
}
func TestAverage(t *testing.T) {
for _, pair := range tests {
v := Average(pair.values)
if v != pair.average {
t.Error(
"For", pair.values,
"expected", pair.average,
"got", v,
)
}
}
}
这是一种非常常见的设置测试的方法(丰富的例子可以在Go软件包的源代码中找到)。我们创建一个结构来表示函数的输入和输出。然后我们 创建一个这些结构的列表(对)。然后我们循环一遍每一个结构并运行该函数。