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

语境

我有一个回购协议,其中多个团队提供集成测试。

所有这些测试都隐藏在//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-api

go: 未知标志 -build=integration 不能与 -c 一起使用

另外...不能-c在多个包中使用该标志:

$ 去测试-c ./...

不能对多个包使用 -c 标志

有任何想法吗?


汪汪一只猫
浏览 71回答 1
1回答

湖上湖

您可以使用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.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go