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

时间:2018-04-02 04:52:33

标签: unit-testing testing go

我想跳过包裹下的特定go文件,同时运行 go test 和coverage。 请找到以下命令,我曾经在我的服务包下运行:

cd src/service && go test --coverprofile coverageService.out --coverpkg ./.

1 个答案:

答案 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测试失败也能使其运行。