本文翻译自我的英文博客,最新修订内容可随时参考:Go Common Test
Go语言中的测试方法主要分为三种类型:单元测试、基准测试和示例测试。
首先:
testing
包。*_test.go
的源代码文件都是go test测试的一部分,并且不会被go build编译到最终的可执行文件中。基本格式/签名为:
func TestXxx(t *testing.T) {
// ...
}
将_test.go和.go文件放在同一目录下,运行go test -v
可以详细执行测试,运行go test -cover
可以检查测试覆盖率。
基准测试默认不会执行,你需要使用go test -bench=Xxx
来执行基准测试。
基本格式/签名为:
func BenchmarkXxx(b *testing.B) {
for i := 0; i < b.N; i++ {
// ...
}
}
b.N
是测试运行的次数,这个值由go test工具自动调整。
BenchmarkSplit-8 10000000 215 ns/op
-8
表示测试在8个GOMAXPROCS上运行10000000
表示测试运行了10000000次215 ns/op
表示每次操作平均耗时215纳秒go test -bench=Xxx -benchmem
可以检查内存分配和每次操作的分配次数。
BenchmarkSplit-8 10000000 215 ns/op 112 B/op 3 allocs/op
112 B/op
表示每次操作分配112字节3 allocs/op
表示每次操作分配3次// 注意:这里的n是Fib函数的参数,而不是b.N,b.N是测试运行的次数,由go test工具自动调整。
func benchmarkFib(b *testing.B, n int) {
for i := 0; i < b.N; i++ {
Fib(n)
}
}
func BenchmarkFib1(b *testing.B) { benchmarkFib(b, 1) }
func BenchmarkFib2(b *testing.B) { benchmarkFib(b, 2) }
func BenchmarkFib3(b *testing.B) { benchmarkFib(b, 3) }
go test -bench=.
会对所有以Benchmark
为前缀的函数执行基准测试。
func BenchmarkSplit(b *testing.B) {
time.Sleep(5 * time.Second) // 一些耗时操作
b.ResetTimer() // 重置计时器(忽略上面的时间)
for i := 0; i < b.N; i++ {
// 一些耗时操作
}
}
// 你也可以使用这种方法
func BenchmarkSplit(b *testing.B) {
b.StopTimer()
// 一些耗时操作
b.StartTimer()
for i := 0; i < b.N; i++ {
// 一些耗时操作
}
}
签名:
func BenchmarkSplitParallel(b *testing.B) {
// b.SetParallelism(1) // 设置使用的CPU数量
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
// 一些耗时操作
}
})
}
签名:
func ExampleName() {
// 无参数和返回值
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。