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
Lepaskan: 2024-12-05 15:19:09
asal
452 orang telah melayarinya

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")
}
Salin selepas log masuk

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()
}
Salin selepas log masuk

Selain itu, rangka kerja ujian yang lebih maju seperti Ginkgo atau Gomega menyediakan pemadanan terbina dalam untuk menegaskan berlakunya panik:

Expect(OtherFunctionThatPanics).To(Panic())
Salin selepas log masuk

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()
}
Salin selepas log masuk

Fungsi ini boleh digunakan seperti berikut:

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan