【问题标题】:How to use go test flag to execute test and bench function correctly?如何使用 go test flag 正确执行 test 和 bench 功能?
【发布时间】:2021-11-11 23:44:55
【问题描述】:

我从 Testing flags 的 go flags 中学习

我在我的项目中写了一些测试文件。

这是我的service 文件夹:

  • 服务
    • family_limit_settings.go
    • family_limit_settings_test.go
    • xxxxxx.go(其他go源文件)
    • xxxxxx_test.go(其他go测试源文件)

而我的family_limit_settings_test.go内容如下:

func TestSaveSettings(t *testing.T) {
    // todo
}

func TestListByFamilyId(t *testing.T) {
    // todo
}

func TestFamilyLimitVerify(t *testing.T) {
    // todo
}

func BenchmarkFamilyListByFamilyId(b *testing.B) {
    // todo
}

func BenchmarkFamilySaveSettings(b *testing.B) {
    // todo
}

func BenchmarkFamilyLimitVerify(b *testing.B) {
    // todo
}

我的第一个问题

cd这个服务文件和运行命令如下:

 go test -v -bench=.

但我发现它运行了其他不是基准功能的测试功能。(我知道是因为其他常见的测试功能出现问题)

我的第二个问题

go test -v -bench=. -run=BenchmarkFamilyListByFamilyId

我想执行名为 BenchmarkFamilyListByFamilyId 的基准函数,但我发现它执行了所有基准函数。

【问题讨论】:

  • 1. family_limit_settings-test.go 可能应该是family_limit_settings_test.go:它是一个分隔“测试”的下划线。 2. 如果你不想运行测试,你必须确保没有运行,例如通过-run x.
  • 1.我这里写错了,我编辑一下。
  • 2. -run regexp 只运行那些匹配正则表达式的测试和示例。对于测试,正则表达式由不带括号的斜杠 (/) 字符拆分为一系列正则表达式,并且测试标识符的每个部分都必须匹配序列中的相应元素(如果有)。请注意,匹配的可能父项也会运行,因此 -run=X/Y 匹配并运行并报告与 X 匹配的所有测试的结果,即使是那些没有与 Y 匹配的子测试的测试,因为它必须运行它们来查找那些子测试-测试。

标签: go testing go-testing


【解决方案1】:

-run 参数仅匹配测试和示例,-bench 匹配基准。而. 是匹配每个名称的正则表达式,因此-bench=. 执行所有基准测试。

要仅执行 BenchmarkFamilyListByFamilyId 基准测试而不执行任何测试,请运行类似

go test -v -bench=ByFamilyId -run=XXX

【讨论】:

  • -bench regexp 仅运行与正则表达式匹配的基准。 -run regexp 只运行那些匹配正则表达式的测试和示例。我现在知道了,但这是一个非常奇怪的设计。 bench 和 run 标志都执行只匹配正则表达式,现在很清楚。但是不要指定 bench 标志不会执行任何基准测试,不要指定运行标志而是运行任何测试和示例。
  • 制作最常见的用例——测试一个包——不需要任何选项对我来说一点都不陌生。
猜你喜欢
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多