在多个 Go 模块的父目录中运行 go test
当使用包含多个 go 模块的目录结构时,例如:
<code class="pre">/root /one go.mod go.sum main.go main_test.go /two go.mod go.sum main.go main_test.go</code>
执行 go 测试。或者从根目录(/root)执行 go test ./... 可能会导致错误,表明未找到任何包。这是因为 go test 期望在单个模块上运行。
要克服此限制,一种方法是使用 shell 技巧。例如,以下命令应遍历子目录并在每个子目录中执行 go test ./...:
<code class="pre">find . -type d -name main_test.go -exec go test '{}/' \;</code>
或者,许多项目实现执行此操作的 Makefile 或测试脚本。例如,test.sh 脚本可以包括:
<code class="pre">for i in $(find . -type d -name main_test.go | sed 's|main_test.go||'); do cd $i go test ./... cd .. done</code>
此脚本将循环遍历存储库,更改到包含 main_test.go 文件的每个子目录,执行 go test ./...,然后返回到父目录。
较大的项目可能会维护所有模块的列表,例如由 go-cloud 项目维护的列表 (https://github.com/google/go-cloud/blob/主/所有模块)。脚本可以使用此列表来迭代模块并执行各种操作,包括运行测试。
以上是如何在具有多个 Go 模块的父目录中运行“go test”?的详细内容。更多信息请关注PHP中文网其他相关文章!