t.Skip() 是运行时跳过单个测试的正确方式,需在测试函数内调用,支持带消息跳过和格式化输出,不可在子 goroutine 中使用;-run 正则可间接跳过测试;build tags 用于编译期排除整文件;环境变量配合 t.Skip() 实现条件跳过。
用 t.Skip() 在运行时跳过单个测试
当某个测试在特定环境(比如缺少依赖、非 Linux 系统、未配置环境变量)下无法执行时,直接调用 t.Skip() 是最干净的做法。它会标记该测试为“skipped”,不报错也不中断整个测试流程。
常见错误是误用 return 或 panic 替代 t.Skip(),导致测试被当成失败或崩溃。
-
t.Skip("requires Docker"):带消息的跳过,输出清晰可读 -
t.Skipf("requires %s", "Redis"):支持格式化,适合动态条件 - 必须在测试函数内部调用,不能在子 goroutine 中调用(
t不跨协程安全) - 跳过发生在测试开始后、断言前;若已执行部分副作用(如写文件),需自行清理
用 go test -run 和 -skip 控制测试范围
go test 命令本身不提供 --skip 参数,但可通过 -run 正则精确匹配要运行的测试名,间接实现“跳过”——即不匹配就不跑。
例如,所有集成测试都以 TestIntegration 开头,而你想跳过它们:
go test -run ^((?!Integration).)*$
这个正则排除含 Integration 的测试名(注意:Go 1.21+ 支持负向先行断言,旧版本不兼容)。