【发布时间】:2014-12-01 06:15:24
【问题描述】:
鉴于此代码
func doomed() {
os.Exit(1)
}
如何正确测试调用此函数是否会导致使用go test 退出?这需要在一组测试中进行,换句话说,os.Exit() 调用不会影响其他测试,应该被捕获。
【问题讨论】:
-
当然这不是问题的直接答案,这就是为什么我不把它写成一个整体,但一般来说:避免编写这样的代码。如果你只是
Exit“在世界的尽头”(main),like this pattern,那么你就不会像这里的(好)公认的解决方案那样编写痛苦的测试。我完全承认您可能一直在测试别人的代码,而您无法轻易重构,但只是希望这些建议对未来的读者有所帮助…… -
如果您确实遵循该模式并且碰巧使用了 Gomega,那么它有 a pretty cool
gexecpackage 非常适合以黑盒方式测试可执行文件的结果。