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

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

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

Go
交互式爱情 2022-10-17 16:54:38
我正在学习 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 上寻求帮助,我知道如何编写这些。我正在寻找一个或多个可以找到并运行测试的命令。
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您似乎对什么是模块感到困惑。经验法则是,一个go.mod文件等于一个模块。去维基,gomod

模块由 Go 源文件树定义,在树的根目录中有一个 go.mod 文件。

根据问题中显示的目录树,看不到go.mod文件,因此没有 Go 模块。事实上,如果您尝试运行模块感知命令,google-golang或者golang-getting-started您将拥有:

go: 在当前目录或任何父目录中找不到 go.mod 文件;见“去帮助模块”

如果您想从多模块存储库的根目录运行所有测试,如您的问题标题所述,使用 Go 1.17 您可以:

  1. 初始化子模块:

$ 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,在每个文件中。因此它们确实被组织为单独的子模块。


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

添加回答

举报

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