【问题标题】:Running `go test` in parent directory of multiple go modules在多个 go 模块的父目录中运行`go test`
【发布时间】:2020-04-11 20:30:37
【问题描述】:

看看这个目录结构:

/root
    /one
        go.mod
        go.sum
        main.go
        main_test.go
    /two
        go.mod
        go.sum
        main.go
        main_test.go

假设我在父目录root/ 中,我想运行所有子目录中的所有测试。我该怎么办?我试过go test./... 并得到以下错误:

go: warning: "./..." matched no packages
no packages to test

【问题讨论】:

  • find . -name go.mod -execdir go test ./... \;
  • @BaytaDarell,您应该将此作为回复发布,您将获得一些当之无愧的支持。

标签: unit-testing go testing


【解决方案1】:

是的,这不适用于go test,它期望在以当前目录或其父目录为根的单个模块上工作。它也不适用于嵌套模块。

您需要一个 shell 技巧,例如使用 find 或在每个模块中执行的等效方法(例如,参见 Cerise Limón 的评论)。项目通常会使用Makefiletest.sh 脚本来运行它。


一个larger project I was working on 有一个其所有模块的列表 (https://github.com/google/go-cloud/blob/master/allmodules),然后是几个在此列表上运行的脚本。例如 test script 只是 loops through 这个文件并为每个目录运行 go test 以及其他内容。

您不一定需要列出模块的单独文件(go-cloud 项目将其用于其他管理任务),但它只是演示了具有多个模块的大型项目处理事情的一种方式。

【讨论】:

  • 那么,如果“./...”不能与子包一起使用,那又有什么意义呢?
  • 另外,go test root/one 生成 main module (root) does not contain package root/one(即使 one/go.mod 指定了该包名称。)
  • @JeffLearman go test ./... 的重点是在子包上运行所有测试,而不是在子模块上。在 99.9% 的情况下,您想要的实际上是子包,而不是子模块,所以 go test 实际上很好地涵盖了最常见的用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 2019-05-27
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多