我想跳过包裹下的特定go文件,同时运行 go test 和coverage。 请找到以下命令,我曾经在我的服务包下运行:
cd src/service && go test --coverprofile coverageService.out --coverpkg ./.
答案 0 :(得分:2)
不幸的是,没有简单的方法可以仅根据文件名跳过测试,但是,这里有三个简单的选项可以使用:
<强> 1。使用正则表达式指定测试
go test命令支持-run
运行时选项,该选项仅运行满足正则表达式的测试:
-run regexp
仅运行与正则表达式匹配的那些测试和示例。 对于测试,正则表达式由未括号的斜杠(/)分割 字符分为正则表达式序列和每个部分 测试标识符必须与中的相应元素匹配 顺序,如果有的话。请注意,可能的比赛父母是 也运行,以便-run = X / Y匹配并运行并报告结果 匹配X的所有测试,即使没有匹配Y的子测试, 因为它必须运行它们来寻找那些子测试。
为了使其正常工作,您需要命名相关文件中的所有测试,以便您可以通过正则表达式排除它们(例如,使所有测试都以{{1开头) },例如TestExcludable...
,TestExcludableA
等。然后使用稍微hacky负正则表达式运行,例如TestExludableB
<强> 2。不要使用构建标志
编译某些测试正如this stackoverflow post中详细解释的那样,您可以使用构建标志来防止特定文件作为测试套件的一部分构建。简而言之,
<强> skip_test.go 强>
-run "Test[^E][^x][^c][^l][^u][^d][^a][^b][^l][^e].*"
然后当您// +build !skipset1
package name
import testing
// Rest of test file
调用go test
参数时,请指定要跳过的测试,例如-tags
。
第3。在构建期间重命名违规文件
如go测试文档中所述,
名称以“_”开头的文件(包括“_test.go”)或“。”被忽略了。
只需用重命名包围你的go test命令,这样就不会将要跳过的文件编译成测试可执行文件:
-tags skipset1
(注意使用mv src/skip_test.go src/_skip_test.go && go test ... || mv src/_skip_test.go src/skip_test.go
并在第二步中使用,即使go测试失败也能使其运行。