如何在多个go模块的父目录下运行`go test`,出错时返回非零

mcvgt66p  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(109)

看看这个目录结构:

/root
    /hoge
        go.mod
        go.sum
        main.go
        /test
           main_test.go
           /unit
              sub_test.go
    /fuga
        go.mod
        go.sum
        main.go
        /test
           main_test.go

您可以使用以下代码运行测试,但如果失败,它将始终返回退出代码0。

find . -name go.mod -execdir go test ./... \;

如果失败,有没有办法返回非零值?

lmvvr0a8

lmvvr0a81#

使用以下命令:

find . -name go.mod -execdir go test ./... -- {} +

关于-execdir command {} +find命令手册:
如果任何带有“+”形式的调用返回一个非零值作为退出状态,那么find返回一个非零的退出状态。如果find遇到错误,这有时会导致立即退出,因此一些挂起的命令可能根本不会运行。
但是go test不需要find命令中匹配的文件。事实上,它会像这样失败:

$ go test ./... go.mod
no required module provides package go.mod; to add it:
    go get go.mod

失败的原因是go.mod被解释为一个包。
解决方法是在{} +之前添加终止符--。请参见命令行标志语法:
标志解析在第一个非标志参数(“-”是非标志参数)之前或结束符“--”之后停止。

相关问题