Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menguji Panik dalam Go dengan Berkesan?
Ujian untuk Panik dalam Go
Apabila menulis ujian dalam Go, menyemak panik boleh menjadi teknik yang berguna. Walau bagaimanapun, tidak seperti Java, Go tidak mempunyai sintaks eksplisit untuk mengendalikan panik secara selektif.
Pertimbangkan contoh berikut:
func f(t *testing.T) { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() OtherFunctionThatPanics() t.Errorf("The code did not panic") }
Kod ini cuba pulih daripada sebarang panik dalam OtherFunctionThatPanics menggunakan fungsi pulihkan . Walau bagaimanapun, ia boleh menjadi mencabar untuk menentukan sama ada fungsi panik sama sekali atau jika tiada panik berlaku.
Penyelesaian
Pendekatan yang disyorkan ialah memberi tumpuan kepada ujian untuk ketidakhadiran panik. Ini boleh dicapai dengan menyongsangkan logik dan memastikan bahawa panik berlaku jika dijangka:
func TestPanic(t *testing.T) { defer func() { if r := recover(); r == nil { t.Errorf("The code did not panic") } }() // Code under test OtherFunctionThatPanics() }
Selain itu, rangka kerja ujian yang lebih maju seperti Ginkgo atau Gomega menyediakan pemadanan terbina dalam untuk menegaskan berlakunya panik:
Expect(OtherFunctionThatPanics).To(Panic())
Utiliti Fungsi
Untuk kemudahan, anda boleh mencipta fungsi generik untuk menegaskan panik:
func assertPanic(t *testing.T, f func()) { defer func() { if r := recover(); r == nil { t.Errorf("The code did not panic") } }() f() }
Fungsi ini boleh digunakan seperti berikut:
func TestPanic(t *testing.T) { assertPanic(t, OtherFunctionThatPanics) }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Panik dalam Go dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!