在父目录中测试多个模块
在父目录中使用多个 Go 模块时,跨运行测试可能会很困难他们所有人。考虑如下所示的目录结构:
/root /one go.mod go.sum main.go main_test.go /two go.mod go.sum main.go main_test.go
问题:
尝试使用 go test 对父目录下的所有模块运行测试./.. . 导致错误:
go: warning: "./..." matched no packages no packages to test
解决方案:
go test 命令设计用于以当前目录或其父目录为根的单个模块。它不支持测试嵌套模块。
要解决此问题,您需要使用 shell 技巧。一种方法是结合使用 find 和 xargs 命令,如 Cerise Limón 的评论所建议。项目通常会创建一个 Makefile 或 test.sh 脚本来自动化此过程。
对于具有大量模块的大型项目,更系统的方法是维护所有模块的列表(如 Google 的 go-cloud 项目) 。然后,该项目使用脚本循环遍历模块列表并执行任务,例如为每个目录运行测试。
示例:
以下 test.sh 脚本演示了这一点方法:
<code class="sh">#!/bin/bash for module in $(cat allmodules); do cd $module go test cd .. done</code>
注意:
您可能不需要单独的文件来列出模块,但 go-cloud 项目的实现提供了一个示例,说明如何更大项目管理多模块测试。
以上是如何在父目录中测试多个Go模块?的详细内容。更多信息请关注PHP中文网其他相关文章!