t.Run用于创建子测试,可组织测试逻辑、独立运行用例、隔离上下文并清晰展示结果。示例:TestAdd中分“正数相加”和“负数相加”两个子测试。优势包括支持go test -run过滤执行、共享setup、并行运行t.Parallel()及清晰错误定位。常与表格驱动结合,如TestDivide遍历用例并为每个命名运行子测试。注意循环中变量捕获、避免goroutine误用外部t,t.Parallel()应置于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
企业网站通用源码是以aspcms作为核心进行开发的asp企业网站源码。企业网站通用源码是一套界面设计非常漂亮的企业网站源码,是2016年下半年的又一力作,适合大部分的企业在制作网站是参考或使用,源码亲测完整可用,没有任何功能限制,程序内核使用的是aspcms,如果有不懂的地方或者有不会用的地方可以搜索aspcms的相关技术问题来解决。网站UI虽然不是特别细腻,但是网站整体格调非常立体,尤其是通观全
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
微信扫一扫
支付宝扫一扫