如何在多模块 Go 项目中运行测试

我正在学习 Go与 Google Go 的专业编程。它有几门课程,每门课程都有几个模块。

我的项目如下所示(使用https://ascii-tree-generator.com/制作):

google-golang/

├─ .github/

│  ├─ workflows/

│  │  ├─ ci.yml

├─ golang-getting-started/

│  ├─ module1/

│  │  ├─ main.go

│  │  ├─ main_test.go

│  ├─ module2/

│  │  ├─ trunc/

│  │  │  ├─ main.go

│  │  │  ├─ main_test.go

├─ .gitignore

├─ README.md

我想*_test.go为每次提交运行文件中的所有测试,但我不清楚如何从根目录 ( google-golang) 执行此操作。我认为不需要一个模块来导入另一个模块,因为练习可以独立完成。这个问题有两个答案,一个建议使用子模块,另一个建议使用 Go 工作区,但都没有提供像我这样的新手可以学习的具体说明。

我不是在 GitHub Actions 上寻求帮助,我知道如何编写这些。我正在寻找一个或多个可以找到并运行测试的命令。


交互式爱情
浏览 72回答 1
1回答

尚方宝剑之说

您似乎对什么是模块感到困惑。经验法则是,一个go.mod文件等于一个模块。去维基,gomod:模块由 Go 源文件树定义,在树的根目录中有一个 go.mod 文件。根据问题中显示的目录树,看不到go.mod文件,因此没有 Go 模块。事实上,如果您尝试运行模块感知命令,google-golang或者golang-getting-started您将拥有:go: 在当前目录或任何父目录中找不到 go.mod 文件;见“去帮助模块”如果您想从多模块存储库的根目录运行所有测试,如您的问题标题所述,使用 Go 1.17 您可以:初始化子模块:$ cd google-golang/golang-getting-started/module1$ go mod init example.com/module1$ cd ../module2$ go mod init example.com/module2使用Cerise Limón从多模块项目的根目录中建议的技巧$ cd google-golang$ find . -name go.mod -execdir go test ./... \;如果您实际上并不关心将子存储库保留为单独的模块,则可以在根存储库中初始化一个模块并从那里运行所有测试:$ cd google-golang # or google-golang/golang-getting-started/$ go mod init example.com/mainmod$ go test ./......但是,即使这个 hack 现在可以工作,它也没有多大意义,因为你的 reposmoduleN有main.go文件,它们的包应该被命名为main,在每个文件中。因此它们确实被组织为单独的子模块。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go