Sid*_*ath 2 testing unit-testing go
我想在运行go 测试和覆盖率时跳过包下的特定 go 文件。请找到以下命令,我曾经在我的服务包下运行:
cd src/service && go test --coverprofile coverageService.out --coverpkg ./.
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有简单的方法可以仅根据文件名跳过测试,但是,这里有三个可能有效的简单选项:
1. 使用正则表达式指定测试
go test 命令支持-run运行时选项,它只运行满足正则表达式的测试:
- 运行正则表达式
仅运行那些与正则表达式匹配的测试和示例。对于测试,正则表达式由不带括号的斜杠 (/) 字符分割成一个正则表达式序列,并且测试标识符的每个部分必须匹配序列中的相应元素(如果有)。请注意,匹配的可能父项也会运行,因此 -run=X/Y 匹配并运行并报告匹配 X 的所有测试的结果,即使是那些没有匹配 Y 的子测试,因为它必须运行它们以查找那些子- 测试。
为了使其工作,您需要以这样的方式命名相关文件中的所有测试,以便您可以通过正则表达式排除它们(例如,让所有测试都TestExcludable...以TestExcludableA、TestExludableB、 等开头))。然后使用稍微有点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 失败也能运行)。