如何利用-short
中给出的go test -short
标志?
是否有可能结合-short
和-benchmark
标志?
我对Go语言很陌生,但我正在努力使自己适应一些常见的做法。其中一部分是尝试确保我的代码不仅以go test
系统工作的方式添加单元测试,而且go test -benchmark
也以有用的方式运行。
目前,我有一个基准测试,包括一系列基于不同大小的输入数据的子测试。运行15个排列需要很长时间,因此可以选择缩短测试时间。
我计划编写的下一组测试可能包括一系列数据输入示例。我希望运行这些中的一个可以作为简短测试的健全性检查,但是可以选择在更长(或正常)的测试运行中运行几个将是好的。
当我看到the GoLang documentation for the testing flags时,它说:“告诉长时间运行的测试,以缩短他们的运行时间。”这听起来像我想要的,但我无法弄清楚如何在测试代码中拿起这个标志。
如何使用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
运行进行主要的持续集成和预提交检查,同时保持较长的测试运行以进行预定的每日或每周构建或合并。
Documents section of The Go Programming Language site提到了如何简要地编写测试代码,但有关该主题的大部分信息都在Package Documentation for the Go Testing Package中。对于大多数主题,大多数文档都可以在包中找到,而不是分开。这可能与类和包文档通常较差的其他语言完全不同。
是否可以组合-short和-benchmark标志?
有可能因为testing.Short()
的范围是全球性的。但是,建议Benchmark测试不要广泛使用-short
标志来控制它们的行为。运行基准测试的人更常见的是更改每个基准测试用例允许的-benchtime
。
默认情况下,工作时间设置为一秒。如果您有60个基准测试用例,则至少需要60秒才能完成运行(设置时间+执行时间)。如果工作时间设置为较小:
go test -benchmem -benchtime 0.5s -bench=. <package_names>
整体执行时间将按比例下降。
go command documentation's Testing Flags section中描述了各种测试条款(不包括未提及工作时间的软件包文档)。您不需要在基准代码中做任何不同的事情来使工作时间有效,只需使用标准的for i := 0; i < b.N; i++ {
,框架将根据需要调整N的值。
虽然不推荐,但我在基准测试中使用了-short
来减少测试用例的数量,当改变函数的输入以指示其Big O notation时。对于所有基准运行(-short和normal),我保留了输入的代表性数据大小以跟踪长期趋势。对于较长的运行,我包括几个小型和大型数据集,以允许近似功能资源需求。与单元测试用例一样,我选择始终在CI中运行-short版本,并按计划运行较长版本。
无论您对Go有什么疑问,强烈建议您仔细阅读https://golang.org/doc/和相关的https://golang.org/pkg/文档。通常最有用的文档在包文档中。