Menguji Fungsi Go dengan log.Fatal()
Adalah perkara biasa dalam aplikasi Go untuk menggunakan log.Fatal() untuk log ralat kritikal dan kemudian segera menamatkan program. Walaupun tingkah laku ini berguna dalam persekitaran pengeluaran, ia menimbulkan cabaran semasa ujian. Begini cara anda boleh mengatasi cabaran ini:
Pelog Tersuai untuk Pengujian
Satu pendekatan ialah melaksanakan pengelog tersuai yang mengubah hala mesej log ke penimbal yang dipratentukan. Ini membolehkan anda menguji kefungsian pengelogan tanpa perlu program ditamatkan kerana log.Fatal().
// logger.go contains a testing logger that implements *log.Logger type TestingLogger struct { b bytes.Buffer } // Println implements log.Print methods, writing to a buffer instead of stdout. func (l *TestingLogger) Println(args ...interface{}) { l.b.WriteString(fmt.Sprintln(args...)) } // String returns the buffered log messages. func (l *TestingLogger) String() string { return l.b.String() }
Contoh Ujian
Dengan pembalak tersuai di tempatnya, anda boleh meneruskan dengan menguji kefungsian pengelogan seperti berikut:
package main import ( "bytes" "log" "testing" ) // Set up the custom logger for testing. var logger = &logger.TestingLogger{} func init() { log.SetOutput(logger) } func TestGoodbye(t *testing.T) { // Call the function to be tested. log.Fatal("Goodbye!") // Verify the expected log message was written to the buffer. wantMsg := "Goodbye!\n" if logger.String() != wantMsg { t.Errorf("Expected: %s, Got: %s", wantMsg, logger.String()) } }
Dengan memisahkan fungsi pengelogan daripada penamatan program dan menangkap mesej log dalam penimbal, anda boleh menguji mana-mana kod yang menggunakan log.Fatal() dengan berkesan tanpa menyebabkan ujian gagal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Fungsi Go yang Menggunakan log.Fatal() dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!