如何使用 go test -short 中给出的 -short 标志?
在命令行上使用短标志会导致testing.Short()
返回的函数true
。您可以使用它来添加测试用例或跳过它们:
if testing.Short() == false {
// Extra test code here
}
上面的内容可能有点不常见,可能更常见的是:
func TestThatIsLong(t *testing.T) {
if testing.Short() {
t.Skip()
}
}
确保有足够的测试用例供您使用-short
运行至少进行最低限度的检查。有些人建议使用-short
运行主要的持续集成和预提交检查,同时为计划的每日或每周构建或合并保留较长的测试运行。
The Go 编程语言网站的文档部分 https://golang.org/doc/简要提到了如何编写测试代码,但有关该主题的大部分信息都在Go 测试包的包文档 https://golang.org/pkg/testing/。对于大多数主题,大部分文档都可以在包中找到,而不是单独的。这可能与其他语言有很大不同,在其他语言中,类和包文档通常很差。
是否可以组合 -short 和 -benchmark 标志?
这是可能的,因为testing.Short()
范围是全球性的。但是,建议基准测试不要广泛使用-short
标志来控制他们的行为。运行基准测试的人更常见的是改变-benchtime
每个基准测试用例都允许。
默认情况下,基准时间设置为一秒。如果您有 60 个基准测试用例,则完成运行至少需要 60 秒(设置时间 + 执行时间)。如果将替补时间设置得更短:
go test -benchmem -benchtime 0.5s -bench=. <package_names>
总体执行时间将成比例下降。
各种测试 clags 中描述go 命令文档的测试标志部分 https://golang.org/cmd/go/#hdr-Testing_flags(不是没有提到工作时间的包文档)。您不需要在基准测试代码中做任何不同的事情来使基准时间有效,只需使用标准for i := 0; i < b.N; i++ {
框架会根据需要调整N的值。
虽然不推荐,但我用过-short
在基准测试中,当改变函数的输入以指示其功能时,可以减少测试用例的数量大O表示法 https://en.wikipedia.org/wiki/Big_O_notation。对于所有基准测试运行(短期和正常),我为输入保留代表性数据大小以跟踪长期趋势。对于较长的运行,我包含了几个小型和较大尺寸的数据集,以允许函数资源需求的近似值。与单元测试用例一样,我选择始终在 CI 中运行短版本,并按计划运行较长版本。
无论您对 Go 有何疑问,强烈建议您尝试仔细阅读both the https://golang.org/doc/ https://golang.org/doc/和相关的https://golang.org/pkg/ https://golang.org/pkg/文件。最有用的文档通常位于包文档中。