Menguji Fungsi Go yang Mengandungi log.Fatal()
Pertimbangkan senario di mana anda mempunyai fungsi Go menggunakan log.Fatal() untuk mencetak mesej. Menguji fungsi sedemikian boleh mencabar kerana log.Fatal() mencetuskan os.Exit(1), menyebabkan kegagalan ujian.
Pendekatan:
Untuk mengatasi cabaran ini, ia perlu dinasihatkan untuk melaksanakan pembalak tersuai yang mengubah hala output ke destinasi log.xxx() standard mereka. Walau bagaimanapun, semasa ujian, anda boleh menukar fungsi seperti log.Fatalf() dengan mudah dengan pelaksanaan anda sendiri yang tidak menggunakan os.Exit(1).
Contoh:
Katakan kita mempunyai kod berikut yang mencetak log:
package main import ( "log" ) func hello() { log.Print("Hello!") } func goodbye() { log.Fatal("Goodbye!") } func init() { log.SetFlags(0) } func main() { hello() goodbye() }
Untuk menguji kod ini, kita boleh merumuskan ujian hipotesis:
package main import ( "bytes" "log" "testing" ) func TestHello(t *testing.T) { var buf bytes.Buffer log.SetOutput(&buf) hello() wantMsg := "Hello!\n" msg := buf.String() if msg != wantMsg { t.Errorf("%#v, wanted %#v", msg, wantMsg) } } func TestGoodby(t *testing.T) { var buf bytes.Buffer log.SetOutput(&buf) goodbye() wantMsg := "Goodbye!\n" msg := buf.String() if msg != wantMsg { t.Errorf("%#v, wanted %#v", msg, wantMsg) } }
Nota:
Pendekatan ini memberikan fleksibiliti dalam menggantikan fungsi logger tertentu semasa ujian, membenarkan penyesuaian tingkah laku tanpa menjejaskan kefungsian fungsi asal sedang diuji.
Atas ialah kandungan terperinci Bagaimana untuk Menguji Fungsi Go Dengan Berkesan Menggunakan `log.Fatal()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!