在包下运行 go 测试时,如何在测试和覆盖率报告中跳过 go 文件

Sid*_*ath 2 testing unit-testing go

我想在运行go 测试和覆盖率时跳过包下的特定 go 文件。请找到以下命令,我曾经在我的服务包下运行:

cd src/service && go test --coverprofile coverageService.out --coverpkg ./.
Run Code Online (Sandbox Code Playgroud)

jwr*_*lub 5

不幸的是,没有简单的方法可以仅根据文件名跳过测试,但是,这里有三个可能有效的简单选项:

1. 使用正则表达式指定测试

go test 命令支持-run运行时选项,它只运行满足正则表达式的测试:

- 运行正则表达式

仅运行那些与正则表达式匹配的测试和示例。对于测试,正则表达式由不带括号的斜杠 (/) 字符分割成一个正则表达式序列,并且测试标识符的每个部分必须匹配序列中的相应元素(如果有)。请注意,匹配的可能父项也会运行,因此 -run=X/Y 匹配并运行并报告匹配 X 的所有测试的结果,即使是那些没有匹配 Y 的子测试,因为它必须运行它们以查找那些子- 测试。

为了使其工作,您需要以这样的方式命名相关文件中的所有测试,以便您可以通过正则表达式排除它们(例如,让所有测试都TestExcludable...TestExcludableATestExludableB、 等开头))。然后使用稍微有点hacky的否定正则表达式运行,例如-run "Test[^E][^x][^c][^l][^u][^d][^a][^b][^l][^e].*"

2. 不要使用构建标志编译某些测试

正如这篇 stackoverflow post中详细解释的那样,您可以使用构建标志来防止将特定文件构建为测试套件的一部分。简而言之,

skip_test.go

// +build !skipset1
package name

import testing

// Rest of test file
Run Code Online (Sandbox Code Playgroud)

然后,当您调用go test我们的-tags参数并指定要跳过的测试时,例如-tags skipset1.

3.在构建过程中重命名有问题的文件

如 go test 文档中所述,

名称以“_”(包括“_test.go”)或“.”开头的文件 被忽略。

只需用重命名将 go test 命令包围起来,这样要跳过的文件就不会实际编译到测试可执行文件中:

mv src/skip_test.go src/_skip_test.go && go test ... || mv src/_skip_test.go src/skip_test.go

(注意||在第二步中使用and ,即使 go test 失败也能运行)。