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/
打赏作者

您将是第一位评论人!