t.Skip 和 t.SkipNow 可跳过测试,前者支持消息参数,后者无参;构建标签可编译时排除测试文件;-run 和 -skip(Go 1.22+)支持运行时动态过滤测试。
使用 t.Skip 跳过当前测试
在测试函数内部调用
t.Skip()
可以立即终止当前测试并标记为“跳过”。它常用于运行时判断不满足条件(如环境缺失、依赖未就绪)时主动退出,避免报错。
示例:
注意:
t.Skip()
之后的代码不会执行,且该测试不会计入失败数,结果中显示为
skipped
。
用 t.SkipNow 提前结束测试
t.SkipNow()
和
t.Skip()
行为一致,都是立即停止当前测试。区别在于
t.SkipNow()
不接受参数,若需带说明信息,仍应使用
t.Skip("msg")
。
立即学习
“
go语言免费学习笔记(深入)
”;
常见写法:
条件成立时直接跳过:
推荐统一用
t.Skip
,语义更清晰、可读性更好
通过构建标签(build tags)控制测试编译
Go 支持用构建约束跳过整个测试文件的编译,适合彻底屏蔽平台相关或资源密集型测试。
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
在测试文件顶部添加注释:
运行时需显式启用标签:
—— 运行带该标签的测试
(默认)—— 忽略该文件
多个标签可用逗号或空格分隔,例如
。
用 -run 和 -skip 迌行时过滤测试
Go test 命令提供原生命令行选项,在不改代码的前提下动态控制执行范围:
—— 只运行名称匹配正则的测试(如 TestUnitXXX)
—— 排除特定名称(需 shell 支持,zsh/bash 下建议加引号)
—— Go 1.22+ 新增,直接跳过匹配名称的测试函数
注意:
-skip
是 Go 1.22 引入的功能,旧版本可用
-run
配合反向正则模拟,但不如原生支持稳定。
func TestAPIWithAuth(t *testing.T) {
if os.Getenv("API_TOKEN") == "" {
t.Skip("API_TOKEN not set, skipping integration test")
}
// 后续测试逻辑
}if !hasNetwork() { t.SkipNow() }//go:build integration
// +build integration
package mypkg
func TestExpensiveIntegration(t *testing.T) { ... }
go test -tags=integrationgo test//go:build linux && cgogo test -run=^TestUnitgo test -run='^(?!TestLegacy).*$'go test -skip="TestHelper|TestMock"