首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go 常见 Test

Go 常见 Test

原创
作者头像
timerring
修改2025-06-06 01:02:39
修改2025-06-06 01:02:39
1190
举报

本文翻译自我的英文博客,最新修订内容可随时参考:Go Common Test

Go语言中的测试方法主要分为三种类型:单元测试、基准测试和示例测试。

首先:

  1. 你需要先导入testing包。
  2. 在包目录中,所有后缀为*_test.go的源代码文件都是go test测试的一部分,并且不会被go build编译到最终的可执行文件中。

单元测试

基本格式/签名为:

代码语言:go
复制
func TestXxx(t *testing.T) {
    // ...
}

将_test.go和.go文件放在同一目录下,运行go test -v可以详细执行测试,运行go test -cover可以检查测试覆盖率。

基准测试

基准测试默认不会执行,你需要使用go test -bench=Xxx来执行基准测试。

基本格式/签名为:

代码语言:go
复制
func BenchmarkXxx(b *testing.B) {
    for i := 0; i < b.N; i++ {
        // ...
    }
}

b.N是测试运行的次数,这个值由go test工具自动调整。

代码语言:sh
复制
    BenchmarkSplit-8        10000000               215 ns/op
  • -8表示测试在8个GOMAXPROCS上运行
  • 10000000表示测试运行了10000000次
  • 215 ns/op表示每次操作平均耗时215纳秒

go test -bench=Xxx -benchmem可以检查内存分配和每次操作的分配次数。

代码语言:sh
复制
    BenchmarkSplit-8        10000000               215 ns/op             112 B/op          3 allocs/op
  • 112 B/op表示每次操作分配112字节
  • 3 allocs/op表示每次操作分配3次

性能比较

代码语言:go
复制
// 注意:这里的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为前缀的函数执行基准测试。

代码语言:go
复制
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++ {
        // 一些耗时操作
    }
}

并行测试

签名:

代码语言:go
复制
func BenchmarkSplitParallel(b *testing.B) {
    // b.SetParallelism(1) // 设置使用的CPU数量
    b.RunParallel(func(pb *testing.PB) {
        for pb.Next() {
            // 一些耗时操作
        }
    })
}

示例测试

签名:

代码语言:go
复制
func ExampleName() {
    // 无参数和返回值
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单元测试
  • 基准测试
    • 性能比较
    • 并行测试
  • 示例测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档