Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengejek Fungsi yang Diimport dalam Go untuk Ujian Berkesan?

Bagaimanakah Saya Boleh Mengejek Fungsi yang Diimport dalam Go untuk Ujian Berkesan?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 03:55:17297semak imbas

How Can I Mock Imported Functions in Go for Effective Testing?

Ejek Separa untuk Fungsi yang Diimport

Dalam Go, menguji fungsi yang bergantung pada fungsi yang diimport daripada pakej luaran boleh menjadi mencabar. Pertimbangkan contoh berikut:

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}

Bolehkah kita mengejek z.SomeFunc() dalam Go?

Memfaktorkan Semula untuk Mengejek

Ya, dengan pengubahsuaian kod mudah. Dengan memperkenalkan pembolehubah ditaip fungsi zSomeFunc dan memulakannya dengan z.SomeFunc, kod pakej boleh memanggil pembolehubah ini dan bukannya z.SomeFunc(). Ini membolehkan kami mengejek fungsi yang diimport semasa ujian.

var zSomeFunc = z.SomeFunc

func abc() {
    ...
    v := zSomeFunc()
    ...
}

Mengejek dalam Ujian

Dalam ujian, kami boleh menetapkan fungsi tersuai kepada zSomeFunc yang berkelakuan seperti yang diperlukan untuk ujian.

func TestAbc(t *testing.T) {
    // Save current function and restore at the end:
    old := zSomeFunc
    defer func() { zSomeFunc = old }()

    zSomeFunc = func() int {
        // This will be called, do whatever you want to,
        // return whatever you want to
        return 1
    }

    // Call the tested function
    abc()

    // Check expected behavior
}

Dengan memfaktorkan semula kod, kami boleh mengejek fungsi yang diimport dan menguji kesannya pada kod kami dengan lebih berkesan. Teknik ini amat berguna apabila menguji kebergantungan pihak ketiga atau mengasingkan bahagian fungsi tertentu untuk ujian disasarkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Fungsi yang Diimport dalam Go untuk Ujian 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