Golang如何使用t.Run进行子测试

t.Run用于创建子测试,可组织测试逻辑、独立运行用例、隔离上下文并清晰展示结果。示例:TestAdd中分“正数相加”和“负数相加”两个子测试。优势包括支持go test -run过滤执行、共享setup、并行运行t.Parallel()及清晰错误定位。常与表格驱动结合,如TestDivide遍历用例并为每个命名运行子测试。注意循环中变量捕获、避免goroutine误用外部t,t.Parallel()应置于t.Run内。

golang如何使用t.run进行子测试

在Go语言中,t.Run*testing.T 提供的一个方法,用于创建子测试(subtests)。它不仅能帮助你组织测试逻辑,还能实现更灵活的测试控制,比如独立运行某个测试用例、隔离测试上下文以及更好地展示测试结果。下面详细介绍如何使用 t.Run 进行子测试。

使用 t.Run 创建子测试

通过 t.Run,你可以将一个测试函数拆分为多个命名的子测试。每个子测试都有自己的名称和独立的执行环境。

基本语法如下:

func TestXXX(t *testing.T) {
  t.Run(“子测试名称”, func(t *testing.T) {
    // 测试逻辑
  })
}

示例:

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

func TestAdd(t *testing.T) {
  t.Run(“正数相加”, func(t *testing.T) {
    if Add(2, 3) != 5 {
      t.Error(“期望 2+3=5”)
    }
  })

  t.Run(“负数相加”, func(t *testing.T) {
    if Add(-1, -1) != -2 {
      t.Error(“期望 -1 + -1 = -2”)
    }
  })
}

子测试的优势与用途

t.Run 不只是一个结构化工具,它还带来以下几个实用特性:

企业网站通用源码1.0 企业网站通用源码1.0

企业网站通用源码是以aspcms作为核心进行开发的asp企业网站源码。企业网站通用源码是一套界面设计非常漂亮的企业网站源码,是2016年下半年的又一力作,适合大部分的企业在制作网站是参考或使用,源码亲测完整可用,没有任何功能限制,程序内核使用的是aspcms,如果有不懂的地方或者有不会用的地方可以搜索aspcms的相关技术问题来解决。网站UI虽然不是特别细腻,但是网站整体格调非常立体,尤其是通观全

企业网站通用源码1.0 0 查看详情 企业网站通用源码1.0 独立运行测试用例:使用命令如 go test -run TestAdd/正数相加 可以只运行匹配的子测试,便于调试。 共享前置逻辑:可以在外层测试中做公共 setup,每个子测试专注于不同场景。 测试作用域隔离:每个子测试有独立的生命周期,t.Parallel() 可以安全地在子测试中调用,实现并行执行。 清晰的输出结构:当测试失败时,日志会明确指出是哪个子测试出错。

结合表格驱动测试使用 t.Run

最常见且推荐的方式是将 t.Run 与表格驱动测试(table-driven tests)结合使用。

func TestDivide(t *testing.T) {
  tests := []struct {
    name string
    a, b int
    expected int
  }{
    {“正数除法”, 10, 2, 5},
    {“被除数为零”, 0, 5, 0},
  }

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

这种写法让测试更加简洁、可扩展,并能清楚看到每个测试用例的名称和结果。

注意事项

使用 t.Run 时注意以下几点:

子测试中的 t 是传入的局部变量,不要在 goroutine 中直接使用外部的 t。 循环中使用 t.Run 时,确保捕获正确的变量(例如通过参数传递或在闭包中复制)。 调用 t.Parallel() 应放在 t.Run 内部,以使子测试并行运行。

基本上就这些。合理使用 t.Run 能显著提升测试的可读性和可维护性,特别是在测试多个边界条件或场景时非常有用。

以上就是Golang如何使用t.Run进行子测试的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1135193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 17:42:24
下一篇 2025年12月2日 17:42:45

相关推荐

发表回复

登录后才能评论
关注微信