在多个 go 模块的父目录中运行 `go test`

Jay*_* K. 8 testing unit-testing go

看一下这个目录结构:

/root
    /one
        go.mod
        go.sum
        main.go
        main_test.go
    /two
        go.mod
        go.sum
        main.go
        main_test.go
Run Code Online (Sandbox Code Playgroud)

假设我位于父目录中root/,并且我想运行所有子目录中的所有测试。我该怎么办?我已经尝试go test./...并收到以下错误:

go: warning: "./..." matched no packages
no packages to test
Run Code Online (Sandbox Code Playgroud)

Eli*_*sky 7

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

\n\n

您需要一个 shell 技巧,例如 usingfind或相当于在每个模块中执行的东西(例如,请参阅 Cerise Lim\xc3\xb3n\ 的评论)。项目通常会使用 aMakefile或 atest.sh脚本来运行它。

\n\n
\n\n

我正在开发的一个较大的项目有一个所有模块的列表(https://github.com/google/go-cloud/blob/master/allmodules),然后是在此列表上运行的几个脚本。例如,测试脚本只是循环遍历该文件并运行go test该文件并针对每个目录以及其他内容

\n\n

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

\n

  • @JeffLearman `go test ./...` 的要点是在子包上运行所有测试,而不是在子模块上运行。在 99.9% 的情况下,您想要的实际上是子包,而不是子模块,因此“go test”实际上很好地涵盖了最常见的用例。 (2认同)