如何在Golang中使用testing框架运行测试_Golang testing框架测试运行方法汇总

golang中testing包用于单元和基准测试,测试文件以_test.go结尾,测试函数以Test开头并接收*testing.T参数;通过go test命令运行测试,-v显示详情,-run按名称过滤测试;支持覆盖率分析,使用-go test -coverprofile生成数据,go tool cover -html查看HTML报告;基准测试以Benchmark开头,用-bench标志运行;推荐表格驱动测试结合t.Run实现子测试,可并行执行t.Parallel();t.Cleanup()用于注册测试后清理操作;掌握这些方法可提升测试效率与代码质量。

如何在Golang中使用testing框架运行测试_Golang testing框架测试运行方法汇总

golang中,testing 包是标准库中用于编写单元测试和基准测试的核心工具。它无需额外安装,配合 go test 命令即可运行测试。下面介绍常见的测试运行方法和技巧,帮助你高效使用 Golang testing 框架。

编写基本测试函数

测试文件以 _test.go 结尾,与被测代码放在同一包中。测试函数必须以 Test 开头,参数为 *testing.T

例如,对 math.go 中的加法函数进行测试:

func Add(a, b int) int { return a + b }

对应测试文件 math_test.go

立即学习go语言免费学习笔记(深入)”;

func TestAdd(t *testing.T) {
  if Add(2, 3) != 5 {
    t.Errorf(“期望 5,实际 %d”, Add(2, 3))
  }
}

运行测试的基本命令

使用 go test 命令运行当前目录下的所有测试:

go test

显示更详细输出(包括运行了哪些测试):

go test -v

只运行名称匹配某个模式的测试(如测试函数名包含 “Add”):

go test -run TestAdd

支持正则表达式,比如运行所有以 TestA 开头的测试:

go test -run ^TestA

测试覆盖率分析

Golang 支持生成测试覆盖率报告。使用以下命令生成覆盖率数据:

go test -coverprofile=coverage.out

生成 HTML 可视化报告:

如何在Golang中使用testing框架运行测试_Golang testing框架测试运行方法汇总

面试猫

AI面试助手,在线面试神器,助你轻松拿Offer

如何在Golang中使用testing框架运行测试_Golang testing框架测试运行方法汇总 39

查看详情 如何在Golang中使用testing框架运行测试_Golang testing框架测试运行方法汇总

go tool cover –html=coverage.out

直接查看覆盖率百分比:

go test -cover

按函数级别显示覆盖情况:

go test -cover -covermode=count -coverprofile=count.out

运行基准测试(Benchmark)

基准测试函数以 Benchmark 开头,接收 *testing.B 参数。例如:

func BenchmarkAdd(b *testing.B) {
  for i := 0; i < b.N; i++ {
    Add(1, 1)
  }
}

运行基准测试:

go test -bench=.

跳过普通测试,仅运行基准测试:

go test -run=^$ -bench=.

指定单次迭代目标时间(如每次运行 3秒):

go test -bench=. -benchtime=3s

子测试(Subtests)与表格驱动测试

推荐使用表格驱动测试来验证多种输入场景:

func TestAdd(t *testing.T) {
  tests := []Struct {
    name String
    a, b, expect int
  }{
    {“2+3=5”, 2, 3, 5},
    {“0+0=0”, 0, 0, 0},
    {“负数测试”, -1, 1, 0},
  }

  for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
      if Add(tt.a, tt.b) != tt.expect {
        t.Errorf(“期望 %d,实际 %d”, tt.expect, Add(tt.a, tt.b))
      }
    })
  }
}

可单独运行某个子测试:

go test -run TestAdd/负数测试

清理操作与测试并行执行

如果测试之间无依赖,可使用 t.Parallel() 并行运行:

func TestSomething(t *testing.T) {
  t.Parallel()
  // 测试逻辑
}

需要在测试结束时执行清理操作,使用 t.Cleanup()

func TestWithCleanup(t *testing.T) {
  tempFile := createTempFile()
  t.Cleanup(func() {
    os.Remove(tempFile)
  })
  // 使用临时文件进行测试
}
基本上就这些常用方法。掌握 go test 的各种参数和 testing 包的特性,能大幅提升测试效率和代码质量。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources