如何在Go中编写使用-short标志的测试,是否可以与-benchmark标志结合使用?

问题描述 投票:-5回答:1

如何利用-short中给出的go test -short标志?

是否有可能结合-short-benchmark标志?

我对Go语言很陌生,但我正在努力使自己适应一些常见的做法。其中一部分是尝试确保我的代码不仅以go test系统工作的方式添加单元测试,而且go test -benchmark也以有用的方式运行。

目前,我有一个基准测试,包括一系列基于不同大小的输入数据的子测试。运行15个排列需要很长时间,因此可以选择缩短测试时间。

我计划编写的下一组测试可能包括一系列数据输入示例。我希望运行这些中的一个可以作为简短测试的健全性检查,但是可以选择在更长(或正常)的测试运行中运行几个将是好的。

当我看到the GoLang documentation for the testing flags时,它说:“告诉长时间运行的测试,以缩短他们的运行时间。”这听起来像我想要的,但我无法弄清楚如何在测试代码中拿起这个标志。

unit-testing go benchmarking
1个回答
1
投票

如何使用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/文档。通常最有用的文档在包文档中。

© www.soinside.com 2019 - 2024. All rights reserved.