golang subprocess tests

Posted baizx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang subprocess tests相关的知识,希望对你有一定的参考价值。

golang Subprocess tests

Sometimes you need to test the behavior of a process, not just a function.

func Crasher() {
    fmt.Println("Going down in flames!")
    os.Exit(1)
}

To test this code, we invoke the test binary itself as a subprocess:

func TestCrasher(t *testing.T) {
    if os.Getenv("BE_CRASHER") == "1" {
        Crasher()
        return
    }
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")
    err := cmd.Run()
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

核心技巧在于os.args[0]可以获取到真实的可执行 test 程序,从而改变环境变量.

以上是关于golang subprocess tests的主要内容,如果未能解决你的问题,请参考以下文章

Golang测试框架testing介绍

golang: go test

golang: go test

如何从 subprocess.Popen() 获取输出。 proc.stdout.readline() 块,没有数据打印出来

subprocess.Popen 需要帮助

Golang调用动态库so