Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menguji Panik dalam Go dengan Berkesan?

Bagaimanakah Saya Boleh Menguji Panik dalam Go dengan Berkesan?

Susan Sarandon
Susan Sarandonasal
2024-12-05 15:19:09445semak imbas

How Can I Effectively Test for Panics in Go?

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!

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