Unit testing 第一次测试失败时使用“go test”停止`
在第一次测试失败后,如何让Unit testing 第一次测试失败时使用“go test”停止`,unit-testing,go,Unit Testing,Go,在第一次测试失败后,如何让去测试几个/packages/…停止 构建和执行其余的测试需要一些时间,尽管已经有一些东西可以使用。要加快构建阶段,您可以运行它 go test -i several/packages/... 在测试之前,构建和安装作为测试依赖项的软件包 要在第一次失败后停止,可以使用 go test several/packages/... | grep FAILED | head -n 1 使用 Go 1.10添加一个新标志failfast进行测试: 新的go测试-failfa
去测试几个/packages/…
停止
构建和执行其余的测试需要一些时间,尽管已经有一些东西可以使用。要加快构建阶段,您可以运行它
go test -i several/packages/...
在测试之前,构建和安装作为测试依赖项的软件包
要在第一次失败后停止,可以使用
go test several/packages/... | grep FAILED | head -n 1
使用
Go 1.10添加一个新标志
failfast
进行测试:
新的go测试-failfast
标志将在任何测试失败后禁用运行其他测试。请注意,允许与失败测试并行运行的测试完成
但是,请注意,这不适用于所有包:
这里有一个解决方法:
for s in $(go list ./...); do if ! go test -failfast -v -p 1 $s; then break; fi; done
我认为您必须通过在每个包上运行go测试并停止循环来展开调用。我怀疑是否有一个标志可以做你想做的。你的第二个建议仍然运行所有的测试,但只是没有打印出来。老实说,我没有用“go test”测试它,但是如果它是以与其他Unix实用程序相同的方式实现的,那么在第一次出现故障时,它应该通过SIGPIPE终止。@kostya我从来没有听说过IPC的这项技术。。。Thanx解释了否决票:有更好的方法来传播go测试中的失败,比如
t.Fatal()
。使用t.Fatal
测试执行将立即停止,您可以将其与-failfast
配对,以实际停止所有测试。因此,如果您使用os.Exit(1)
之类的工具进行测试,则退出(1)。/…我认为您将只停止一个进程,而不是整个测试执行。因此,实际上很少有次您希望在测试中使用os.Exit(1)
,在我的情况下不会发生任何事情。使用go版本go1.12.1 darwin/amd64运行时使用go测试-failfast./…
for s in $(go list ./...); do if ! go test -failfast -v -p 1 $s; then break; fi; done