Go语言中通过testing.Short()函数识别并标记长测试,开发者在测试中判断该函数返回值,若为true则调用t.Skip()跳过耗时或依赖外部资源的测试;如TestSomethingLongRunning中使用if testing.Short() { t.Skip("...") }实现短模式跳过;通常执行时间超几百毫秒或涉及网络、数据库操作的测试被视为长测试,需手动标记;在CI/CD中不应完全依赖-short模式,但可分阶段使用,如在快速预检阶段运行go test -short以快速反馈,再在后续阶段执行完整测试,确保覆盖率;为避免滥用导致覆盖不足,团队需建立规范明确标记范围,确保CI流水线始终运行完整测试,并通过代码审查和定期检查覆盖率防止测试遗漏。

在Go语言的测试体系中,
go test -short
要应用
go test -short
testing
testing.Short()
go test -short
true
testing.Short()
通常,我们会将那些需要访问数据库、进行网络请求、执行文件I/O操作、或者需要长时间计算的测试标记为“长测试”。一个典型的做法是:
package mypackage
import (
"testing"
"time" // 假设某个操作需要模拟耗时
)
func TestSomethingFast(t *testing.T) {
// 这是一个快速测试,无论是否是short模式都会运行
if 1+1 != 2 {
t.Errorf("Basic arithmetic failed")
}
}
func TestSomethingLongRunning(t *testing.T) {
if testing.Short() {
t.Skip("Skipping long-running test in short mode") // 在short模式下跳过
}
// 模拟一个耗时操作,比如数据库查询、API调用等
time.Sleep(2 * time.Second)
t.Log("Long-running test completed successfully.")
}
func TestAnotherLongRunningWithResource(t *testing.T) {
if testing.Short() {
t.Skip("Skipping resource-intensive test in short mode")
}
// 这里可以放置需要外部资源(如真实数据库连接)的测试逻辑
// 假设需要连接到外部服务
// client, err := connectToExternalService()
// if err != nil {
// t.Fatal(err)
// }
// defer client.Close()
// ... 执行测试 ...
t.Log("Resource-intensive test completed.")
}当你执行
go test
go test -short
TestSomethingLongRunning
TestAnotherLongRunningWithResource
testing.Short()
true
立即学习“go语言免费学习笔记(深入)”;
识别长时间测试,这事儿说起来有点主观,但又很实际。通常,一个测试如果执行时间超过几百毫秒,或者它依赖外部服务、数据库,每次跑起来都得等个几秒甚至几十秒,那它就很有可能被归类为“长测试”了。我们写代码的时候,很容易就能感觉到哪个测试跑起来“肉”,因为它会拖慢整个测试套件的执行速度。
具体到识别上,你可以用
go test -v -bench .
go test
标记嘛,就像前面代码示例里那样,直接在测试函数开头加个
if testing.Short() { t.Skip(...) }short
go test -short
go test -short
-short
但是,这并不意味着它在CI/CD里就毫无用武之地。想象一下,如果你的CI/CD流水线有多个阶段,比如“快速构建与单元测试”和“全面集成与部署测试”。在“快速构建”阶段,你可能需要一个极其迅速的反馈,比如在开发者提交代码到版本控制系统时,立即运行一个非常快的检查,以确保基本语法无误、核心单元测试通过,这时就可以考虑在这一阶段使用
go test -short
举个例子,在GitHub Actions或者GitLab CI中,你可以在
push
go test -short
-short
testing.Short()
滥用
testing.Short()
要避免这种滥用,首先,也是最关键的,就是要有一个健壮的、始终运行完整测试的CI/CD流水线。你的CI系统必须是那个“严格的老师”,每次代码合并到主分支(或者重要的发布分支)之前,都必须强制运行所有测试,不带任何
-short
其次,团队内部需要建立清晰的规范和共识。哪些测试可以被标记为
short
testing.Short()
short
再来,代码审查(Code Review)在这方面也扮演着重要角色。当有开发者提交包含
t.Skip
testing.Short()
最后,定期审查测试报告和覆盖率。如果发现某些关键模块的测试覆盖率在下降,或者一些集成测试长时间没有在CI中跑过,那就需要警惕了。这可能就是
testing.Short()
testing.Short()
以上就是Golang跳过长时间测试 Short模式应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号