Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis kegagalan ujian dan kaedah penyahpepijatan di Golang

Analisis kegagalan ujian dan kaedah penyahpepijatan di Golang

WBOY
WBOYasal
2023-08-07 10:29:031492semak imbas

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.

  1. Nilai jangkaan tidak sama dengan nilai sebenar
    Apabila kita menyemak sama ada keputusan tertentu memenuhi jangkaan dalam ujian, mungkin terdapat situasi di mana nilai jangkaan dan nilai sebenar tidak sama. Pada ketika ini, rangka kerja ujian Golang akan memberitahu kami kandungan khusus nilai yang dijangka dan sebenar.

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.

  1. Atur cara keluar secara tidak normal
    Kadangkala kod yang diuji dalam ujian kami mungkin keluar secara tidak normal, dan kemudian kami perlu mencari punca ralat.

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.

  1. Gunakan output fmt
    Dalam fungsi ujian, kita boleh menggunakan fungsi Printf atau Println bagi pakej fmt untuk mengeluarkan nilai pembolehubah. Dengan memerhatikan nilai output, kami boleh membantu kami mengetahui di mana ralat itu terletak.
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.

  1. Gunakan penyahpepijatan titik putus
    Anda boleh menggunakan beberapa persekitaran pembangunan bersepadu (IDE) untuk penyahpepijatan di Golang, seperti menggunakan Kod Visual Studio dengan penyahpepijat Delve.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn