Meliputi pelbagai senario ujian adalah penting untuk pembangunan perisian yang mantap. Dalam Go, menguji fungsi yang memanggil os.Exit memberikan cabaran yang unik. Bagaimanakah kami boleh menguji senario keluar tanpa mengganggu keseluruhan suite ujian?
Pertimbangkan fungsi berikut, ditakdirkan:
func doomed() { os.Exit(1) }
Untuk menguji dengan berkesan bahawa penggunaan fungsi ini mencetuskan keluar, anda akan perlu menggunakan strategi yang mengehadkan os.Keluar panggilan dalam ujian dan menghalangnya daripada menjejaskan orang lain ujian.
Andrew Gerrand, ahli teras pasukan Go, memberikan pendekatan yang bijak untuk masalah ini dalam pembentangannya. Mari kita laksanakan penyelesaian ini:
main.go (Program dengan fungsi yang akan diuji)
package main import ( "fmt" "os" ) func Crasher() { fmt.Println("Going down in flames!") os.Exit(1) }
main_test.go (Ujian untuk Crasher fungsi)
package main import ( "os" "os/exec" "testing" ) func TestCrasher(t *testing.T) { // Check if "BE_CRASHER" environment variable is set. if os.Getenv("BE_CRASHER") == "1" { Crasher() return } // Invoke the test again with "BE_CRASHER=1" to trigger the Crasher call. cmd := exec.Command(os.Args[0], "-test.run=TestCrasher") cmd.Env = append(os.Environ(), "BE_CRASHER=1") err := cmd.Run() // Validate exit code. if e, ok := err.(*exec.ExitError); ok && !e.Success() { return } t.Fatalf("process ran with err %v, want exit status 1", err) }
Pelaksanaan:
Penyelesaian ini berfungsi dengan:
Menggunakan pendekatan ini, anda yakin boleh menguji senario keluar dalam Go without mengganggu seluruh suite ujian anda.
Atas ialah kandungan terperinci Bagaimana untuk Menguji Senario `os.Exit` dalam Pergi Tanpa Mengganggu Suite Ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!