【发布时间】:2018-04-02 04:52:33
【问题描述】:
我想跳过包下的特定 go 文件,同时运行 go 测试 和覆盖。 请找到以下命令,我曾经在我的服务包下运行:
cd src/service && go test --coverprofile coverageService.out --coverpkg ./.
【问题讨论】:
标签: unit-testing testing go
我想跳过包下的特定 go 文件,同时运行 go 测试 和覆盖。 请找到以下命令,我曾经在我的服务包下运行:
cd src/service && go test --coverprofile coverageService.out --coverpkg ./.
【问题讨论】:
标签: unit-testing testing go
不幸的是,没有简单的方法可以仅根据文件名跳过测试,但是,以下三个简单的选项可能会起作用:
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。不要使用构建标志编译某些测试
正如this stackoverflow post 中详细说明的那样,您可以使用构建标志来阻止特定文件构建为测试套件的一部分。简而言之,
skip_test.go
// +build !skipset1
package name
import testing
// Rest of test file
然后,当您调用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
(注意使用 || 并在第二步中,即使 go 测试失败也使其运行)。
【讨论】: