go的测试分为:
- 单元测试
- 性能测试
- 用例测试
下面逐一讲解如何编写
单元测试
// some.go
package sometest
func Add(a, b int) int {
return a + b
}
// some_test.go
package sometest
import "testing"
func TestAdd(t *testing.T) {
a := 1
b := 2
expectd := 3
actual := Add(a, b)
if actual != expectd {
t.Errorf("Add(%d,%d) == %d, expected: %d", a, b, actual, expectd)
}
}
注意测试文件都是以_test.go 结尾,而且测试的函数名必须都是以Test开始,名称风格则是驼峰。
# 运行单元测试
go test .
性能测试
// bench_test.go
package basicbench
import "testing"
// go test -bench=.
// BenchmarkSlicWithoutPreAlloc
func BenchmarkSlicWithoutPreAlloc(b *testing.B) {
var slice []int
for i := 0; i < b.N; i++ {
for j := 0; j < 100000; j++ {
slice = append(slice, j)
}
}
}
// BenchmarkSliceWithPreAlloc
func BenchmarkSliceWithPreAlloc(b *testing.B) {
for i := 0; i < b.N; i++ {
slice := make([]int, 0, 100000)
for j := 0; j < 100000; j++ {
slice = append(slice, j)
}
}
}
这里面有一个性能测试方法,一个没有预先分配切片的空间,一个预先分配了切片的空间。 go test -bench=. 运行性能测试,结果如下:
第一列是函数名称,第二列是运行的次数,而最后一列则表示一次操作的耗时。两者差了十几倍。
从结果可以看得出来预先分配slice还是非常重要的。