如何在 Go 中测试 os.exit 场景

鉴于此代码


func doomed() {

  os.Exit(1)

}

我如何正确测试调用此函数将导致使用退出go test?这需要在一组测试中发生,换句话说,os.Exit()调用不会影响其他测试,应该被捕获。


MMMHUHU
浏览 201回答 3
3回答

繁华开满天机

我通过使用bouk/monkey来做到这一点:func TestDoomed(t *testing.T) {  fakeExit := func(int) {    panic("os.Exit called")        }  patch := monkey.Patch(os.Exit, fakeExit)  defer patch.Unpatch()  assert.PanicsWithValue(t, "os.Exit called", doomed, "os.Exit was not called")}在处理这类工作、故障注入和其他困难任务时,monkey 是超级强大的。它确实带有一些警告。

蓝山帝景

我认为如果os.Exit不从外部(使用exec.Command)过程模拟测试,就无法测试实际情况。也就是说,您可以通过创建接口或函数类型,然后在测试中使用 noop 实现来实现您的目标:package mainimport "os"import "fmt"type exiter func (code int)func main() {    doExit(func(code int){})    fmt.Println("got here")    doExit(func(code int){ os.Exit(code)})}func doExit(exit exiter) {    exit(1)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go