Menguji analisis kegagalan dan kaedah penyahpepijatan di Golang
Pengenalan:
Dalam proses pembangunan perisian, ujian adalah pautan yang sangat diperlukan. Melalui ujian, kami boleh mengesahkan sama ada kod yang kami tulis menepati jangkaan dan sama ada terdapat ralat. Walau bagaimanapun, kadangkala ujian kami gagal, dan pada masa ini kami perlu menganalisis dan nyahpepijat untuk mengetahui punca ralat. Artikel ini akan memperkenalkan analisis kegagalan ujian biasa dan kaedah penyahpepijatan di Golang, dan memberikan contoh kod yang sepadan.
1. Analisis Ralat
Apabila ujian kita gagal, mula-mula kita perlu mengetahui sebab kegagalan ujian. Rangka kerja ujian di Golang menyediakan output yang kaya untuk membantu kami menganalisis sebab kegagalan. Kita boleh melaksanakan arahan berikut dalam direktori di mana fail ujian terletak:
go test -run TestFunc -v
Antaranya, TestFunc ialah nama fungsi ujian, dan -v bermaksud untuk mengeluarkan maklumat yang lebih terperinci.
Di bawah ini kami akan memperkenalkan punca kegagalan biasa dan kaedah analisisnya.
Sebagai contoh, kita mempunyai fungsi ujian berikut:
func TestAdd(t *testing.T) { result := Add(2, 3) expected := 5 if result != expected { t.Errorf("Add(2, 3) = %d; expected %d", result, expected) } }
Apabila ujian dilaksanakan, jika keputusan sebenar tidak sama dengan hasil yang diharapkan, output akan serupa dengan:
--- FAIL: TestAdd (0.00s) main_test.go:10: Add(2, 3) = 6; expected 5
Melalui output kita dapat dengan jelas lihat bahawa keputusan sebenar ialah 6 , dan hasil yang dijangkakan ialah 5; dengan cara ini kita boleh mencari masalah dengan mudah.
Pertama sekali, kita boleh menentukan titik keluar yang tidak normal dan hubungan panggilan program dengan mencetak maklumat tindanan. Sebagai contoh, kita mempunyai fungsi ujian berikut:
func TestDivide(t *testing.T) { result := Divide(10, 0) t.Log(result) }
Apabila fungsi di bawah ujian Divide(10, 0) dipanggil, jika pembahagi ialah 0, pengecualian panik akan dicetuskan. Rangka kerja ujian Golang akan mencetak maklumat pengecualian seperti berikut:
--- FAIL: TestDivide (0.00s) main_test.go:10: runtime error: integer divide by zero
Melalui maklumat output di atas, kita dapat melihat bahawa pembahagian integer dengan ralat sifar berlaku apabila fungsi ujian melaksanakan Divide(10, 0).
Untuk menganalisis masalah dengan lebih baik, kami boleh menggunakan pulih di dalam fungsi ujian untuk menangkap panik dan mengeluarkannya ke fail log yang ditentukan atau output standard melalui pakej log dalam perpustakaan standard.
func TestDivide(t *testing.T) { defer func() { if err := recover(); err != nil { t.Errorf("TestDivide failed: %v", err) // 或者使用 log.Fatal(err)将错误输出到标准错误流 } }() result := Divide(10, 0) t.Log(result) }
Dengan cara ini, walaupun fungsi di bawah panik ujian, kami boleh menangkap pengecualian dan mengeluarkan maklumat ralat yang berkaitan.
2. Analisis Penyahpepijatan
Apabila kita menemui sebab kegagalan ujian, kadangkala kita perlu nyahpepijat untuk mengetahui ralat tertentu. Berikut ialah beberapa kaedah penyahpepijatan.
func TestAdd(t *testing.T) { result := Add(2, 3) fmt.Println(result) expected := 5 if result != expected { t.Errorf("Add(2, 3) = %d; expected %d", result, expected) } }
Dengan mengeluarkan hasil, kita dapati bahawa nilai hasil bukanlah 5 yang kita jangkakan, jadi masalahnya mungkin terletak pada fungsi Tambah.
Pertama sekali, di kawasan kod yang perlu dinyahpepijat, kita boleh memasukkan titik putus di hadapan garis kunci. Kami kemudian memulakan penyahpepijat dengan menjalankan arahan berikut dalam terminal:
dlv test -- -test.run TestFunc
Di mana TestFunc ialah nama fungsi ujian yang ingin kami nyahpepijat.
Selepas penyahpepijat dimulakan, kita boleh memasuki lokasi titik putus melalui operasi baris arahan, melihat nilai pembolehubah, dan melaksanakan kod langkah demi langkah. Ini membantu kami mengenal pasti masalah.
Kesimpulan:
Pengenalan artikel ini untuk analisis kegagalan ujian dan kaedah penyahpepijatan di Golang boleh membantu pembangun lebih memahami dan menggunakan rangka kerja ujian Golang untuk ujian dan penyahpepijatan.
Atas ialah kandungan terperinci Analisis kegagalan ujian dan kaedah penyahpepijatan di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!