为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:跨回购编译所有测试而不执行它们

Golang:跨回购编译所有测试而不执行它们

Go
汪汪一只猫 2022-12-26 10:44:59
语境我有一个回购协议,其中多个团队提供集成测试。所有这些测试都隐藏在//go:build integration标志后面,所以如果我想go查看或运行它们,我需要将-build integration标志传递给测试命令。目的我想要完成的是编译整个 repo 中的所有测试而不实际执行它们(将花费很长时间),这样我就可以捕获由 PR 引入的默认go test编译和执行不会捕获的构建错误。我看到了-c旗帜:-c 将测试二进制文件编译为 pkg.test 但不运行它(其中 pkg 是包导入路径的最后一个元素)。可以使用 -o 标志更改文件名。但是......不能将-c标志与标志一起使用-build:$ go test -build=integration -c ./integrationtests/client/admin-apigo: 未知标志 -build=integration 不能与 -c 一起使用另外...不能-c在多个包中使用该标志:$ 去测试-c ./...不能对多个包使用 -c 标志有任何想法吗?
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

您可以使用go test -run标志并将其传递给您知道永远不会匹配的模式:


go test -run=XXX_SHOULD_NEVER_MATCH_XXX ./...


ok      mypkg       0.731s [no tests to run]

这将捕获任何测试编译错误——如果没有——则不会运行任何测试。


如果您需要传递通常在您的go build过程中传递的任何构建标记(例如go build -tags mytag),您可以在以下过程中执行相同的操作go test:


go test -tags mytag -run=XXX_SHOULD_NEVER_MATCH_XXX ./...

-run内联 ( go help testflag) 文档中有关标志的完整详细信息:


        -run regexp

            Run only those tests, examples, and fuzz tests matching the regular

            expression. For tests, the regular expression is split by unbracketed

            slash (/) characters into a sequence of regular expressions, and each

            part of a tests identifier must match the corresponding element in

            the sequence, if any. Note that possible parents of matches are

            run too, so that -run=X/Y matches and runs and reports the result

            of all tests matching X, even those without sub-tests matching Y,

            because it must run them to look for those sub-tests.


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信