本文共 666 字,大约阅读时间需要 2 分钟。
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 程序,从而改变环境变量.
转载地址:http://wmkwo.baihongyu.com/