Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menguji Fungsi Pengendali Gin dengan Berkesan dengan Parameter Pertanyaan?

Bagaimana untuk Menguji Fungsi Pengendali Gin dengan Berkesan dengan Parameter Pertanyaan?

DDD
Lepaskan: 2024-12-22 01:50:24
asal
214 orang telah melayarinya

How to Effectively Unit Test Gin Handler Functions with Query Parameters?

Menguji Fungsi Pengendali Gin dengan Parameter Pertanyaan

Analisis Ralat

Apabila unit menguji fungsi pengendali Gin yang mengikat parameter pertanyaan, alamat memori tidak sah atau nol ralat penyahrujukan penunjuk berlaku disebabkan oleh HTTP yang tidak dimulakan dengan betul permintaan.

Penyelesaian: Permintaan dan Pengikatan Mengejek

Untuk mengejek pengikatan parameter pertanyaan menggunakan c.BindQuery(), mulakan permintaan HTTP dengan URL dan URL.RawQuery yang betul. Gunakan fungsi pembantu berikut:

func mockGin() (*gin.Context, *httptest.ResponseRecorder) {
    req := &http.Request{
        URL:    &url.URL{},
        Header: make(http.Header),
    }

    q := req.URL.Query()
    // Add query parameters to the request
    // ...

    req.URL.RawQuery = q.Encode()

    c, _ := gin.CreateTestContext(httptest.NewRecorder())
    c.Request = req

    return c, httptest.NewRecorder()
}
Salin selepas log masuk

Menguji Panggilan Perkhidmatan

Untuk menguji panggilan perkhidmatan, jadikan perkhidmatan sebagai antara muka dan masukkannya ke dalam pengendali. Anda boleh menetapkan perkhidmatan sebagai nilai konteks Gin, membolehkan anda mengejeknya dalam ujian unit. Contohnya:

func GetMaterialByFilter(c *gin.Context) {
    weldprogService := mustGetService(c)
    // ... Call the service method ...
}

func mustGetService(c *gin.Context) services.WeldprogService {
    svc, exists := c.Get("svc_context_key")
    if !exists {
        panic("service was not set")
    }
    return svc.(services.WeldprogService)
}
Salin selepas log masuk

Dalam ujian unit, tetapkan perkhidmatan olok-olok ke dalam konteks:

c.Set("svc_context_key", &mockSvc{})
Salin selepas log masuk

di mana mockSvc melaksanakan antara muka perkhidmatan.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Fungsi Pengendali Gin dengan Berkesan dengan Parameter Pertanyaan?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan