【问题标题】:Stop on first test failure with `go test`使用“go test”在第一次测试失败时停止
【发布时间】:2015-11-09 20:13:07
【问题描述】:

我如何让go test several/packages/... 在第一次测试失败后停止?

尽管已经有一些东西可以使用,但构建和执行其余测试需要一些时间。

【问题讨论】:

  • 我认为您必须自己展开调用,方法是在每个包上运行 go test 并停止循环。我怀疑有一个标志可以做你想做的事。

标签: unit-testing go


【解决方案1】:

Go 1.10 添加新标志failfast 进行测试:

新的 go test -failfast 标志会在任何测试失败后禁用运行其他测试。请注意,允许完成与失败测试并行运行的测试。

https://golang.org/doc/go1.10

但是,请注意这在包中不起作用:https://github.com/golang/go/issues/33038

这里有一个解决方法:

for s in $(go list ./...); do if ! go test -failfast -v -p 1 $s; then break; fi; done

【讨论】:

    【解决方案2】:

    为了加快构建阶段,您可以运行

    go test -i several/packages/...
    

    在测试之前构建和安装作为测试依赖项的包。

    要在第一次失败后停止,您可以使用类似

    go test several/packages/... | grep FAILED | head -n 1
    

    【讨论】:

    • 您的第二个建议仍然运行所有测试,但只是没有打印出来。
    • 老实说,我没有用go test 对其进行测试,但如果它的实现方式与其他 Unix 实用程序相同,则应在第一次出现 FAILED 时通过 SIGPIPE 终止。
    • @kostya 我从未听说过 IPC 的这种技术...thanx
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2021-03-19
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2018-12-17
    相关资源
    最近更新 更多