Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengejek BindJSON gin.Context untuk Ujian Pergi dengan Berkesan?

Bagaimana untuk Mengejek BindJSON gin.Context untuk Ujian Pergi dengan Berkesan?

Patricia Arquette
Lepaskan: 2024-12-06 19:22:12
asal
275 orang telah melayarinya

How to Effectively Mock gin.Context's BindJSON for Go Testing?

Menetapkan Mock gin.Context untuk BindJSON dalam Go

Pengenalan

Mengikat data JSON ke struct semasa permintaan HTTP ialah tugas biasa dalam aplikasi web . Ia boleh menjadi mencabar apabila menggunakan rangka kerja ujian yang memerlukan mengejek konteks permintaan. Khususnya, mengejek gin.Konteks menimbulkan kesukaran apabila cuba menguji fungsi yang bergantung pada kaedah BindJSONnya. Artikel ini menyediakan penyelesaian yang komprehensif untuk isu ini.

Gin mengejek.Konteks

Pertama, adalah penting untuk membuat seketika gin ujian.Konteks dan menetapkan http.Permintaannya sebagai bukan nol:

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

    c.Request = &http.Request{
        Header: make(http.Header),
    }
Salin selepas log masuk

Mengejek Badan POST JSON

Seterusnya, kita boleh mengejek POST JSON body menggunakan fungsi berikut:

func MockJsonPost(c *gin.Context /* the test context */, content interface{}) {
    c.Request.Method = "POST" // or PUT
    c.Request.Header.Set("Content-Type", "application/json")

    jsonbytes, err := json.Marshal(content)
    if err != nil {
        panic(err)
    }
    
    // the request body must be an io.ReadCloser
    // the bytes buffer though doesn't implement io.Closer,
    // so you wrap it in a no-op closer
    c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonbytes))
}
Salin selepas log masuk

Fungsi ini menerima parameter antara muka kandungan{} yang boleh digabungkan ke dalam JSON menggunakan json.Marshal(). Ini boleh menjadi struct dengan teg JSON yang sesuai atau peta[rentetan]antara muka{}.

Contoh Penggunaan

Berikut ialah cara menggunakan fungsi MockJsonPost dalam ujian:

func TestMyHandler(t *testing.T) {
    w := httptest.NewRecorder()
    ctx, _ := gin.CreateTestContext(w) 

    ctx.Request = &http.Request{
        Header: make(http.Header),
    }


    MockJsonPost(ctx, map[string]interface{}{"foo": "bar"})
    
    MyHandler(ctx)
    assert.EqualValues(t, http.StatusOK, w.Code)
} 
Salin selepas log masuk

Nota Tambahan

Untuk maklumat lanjut tentang ujian pengendali Gin, rujuk perkara berikut sumber:

  • Bagaimana untuk menguji unit fungsi pengendali Go Gin?

Atas ialah kandungan terperinci Bagaimana untuk Mengejek BindJSON gin.Context untuk Ujian Pergi 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