Go 单元测试和基准测试
go 默认以 _test.go
后缀代表测试文件,比如源文件 upload.go
, 测试文件为 upload_test.go
。必须导入 testing
包,不需要 main
函数。
- 单元测试方法名称以
Test
开头,参数为t *testing.T
。 - 基准测试方法名称以
Benchmark
开头,参数为t *testing.B
。
常用测试方法有:
Fail()
失败,继续测试FailNow()
: 失败,终止测试Log()
: 输出错误信息Error()
: 失败并且输出日志,不终止运行Fatal()
: 失败并且输出日志,终止运行Skip()
: 跳过当前测试
单元测试示例:
package go_test
import (
"testing"
)
func TestUpload(t *testing.T) {
t.Log("输出错误信息")
// t.Error("失败并且输出日志,不终止运行")
// t.Fatal("失败并且输出日志,终止运行")
// t.FailNow("失败,终止测试")
// t.Fail("失败,继续测试")
// t.Skip("跳过测试")
}
相关命令:
go test
运行所有单元测试,不含基准测试go test -v
测试并输出详细信息go test -v upload_test.go -run TestUpload
指定文件和指定方法测试go test -v upload_test.go -run TestU
指定文件和匹配 U 开头方法测试
-run
参数进行正则匹配
-v
输出信息
基准测试示例:
测试不同方法把 int 转字符串的性能。
package go_test
import (
"fmt"
"strconv"
"testing"
)
func BenchmarkSprintf(b *testing.B) {
num := 10
b.ResetTimer()
for i := 0; i < b.N; i++ {
fmt.Sprintf("%d", num)
}
}
func BenchmarkFormat(b *testing.B) {
num := int64(10)
b.ResetTimer()
for i := 0; i < b.N; i++ {
strconv.FormatInt(num, 10)
}
}
func BenchmarkItoa(b *testing.B) {
num := 10
b.ResetTimer()
for i := 0; i < b.N; i++ {
strconv.Itoa(num)
}
}
相关命令
go test -bench=. -v -run=none
运行所有基准测试,不运行单元测试go test -bench=. -benchtime=3s -v
指定运行时间为 3 秒go test -bench=BenchmarkItoa
指定运行某个测试
-bench
匹配基准测试
-benchtime
指定基准测试运行时间
-benchmem
查看使用内存
参考资料:https://golang.org/pkg/testing/
打赏作者
您将是第一位评论人!