代码之家  ›  专栏  ›  技术社区  ›  Siddhanta Rath

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

  •  2
  • Siddhanta Rath  · 技术社区  · 7 年前

    我想在运行 go测试 和覆盖范围。 请查找以下命令,我曾在我的服务包下运行:

    cd src/service && go test --coverprofile coverageService.out --coverpkg ./.
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   jwriteclub Himanshu Shukla    7 年前

    不幸的是,没有简单的方法可以跳过仅基于文件名的测试,但是,下面有三个简单的选项可以工作:

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

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

    -运行regexp

    仅运行与正则表达式匹配的测试和示例。 对于测试,正则表达式由无支撑斜杠(/)拆分 将字符转换为正则表达式序列 测试标识符的 序列(如有)。请注意,匹配项的可能父项是 也运行,以便-run=X/Y匹配并运行并报告结果 在所有匹配X的测试中,即使没有匹配Y的子测试, 因为它必须运行它们来查找这些子测试。

    为了实现这一点,您需要以这样一种方式命名文件中的所有测试,即可以通过正则表达式排除它们(例如,使所有测试都以 TestExcludable... 例如 TestExcludableA ,则, TestExludableB 等)。然后使用一个稍微粗糙的负正则表达式运行,例如 -run "Test[^E][^x][^c][^l][^u][^d][^a][^b][^l][^e].*"

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

    如中详细说明 this stackoverflow post ,您可以使用生成标志来阻止特定文件作为测试套件的一部分生成。简而言之

    跳过\u测试。去

    // +build !skipset1
    package name
    
    import testing
    
    // Rest of test file
    

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

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

    按照go测试文件的规定,

    名称以“\u”(包括“\u 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测试失败,也要使其运行)。