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

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

Linda Hamilton
Linda Hamiltonasal
2024-12-18 09:41:10229semak imbas

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

Fungsi Mengejek yang Diimport daripada Pakej dalam Go

Apabila menguji kaedah Go yang menggunakan fungsi yang diimport daripada pakej luaran, fungsi luaran ini mungkin perlu dipermainkan untuk ujian yang berkesan. Satu pendekatan adalah untuk memfaktorkan semula kod dan memperkenalkan panggilan fungsi perantaraan dan bukannya memanggil terus fungsi luaran.

Dalam contoh yang disediakan:

import x.y.z

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

Buat pembolehubah baharu zSomeFunc jenis func dan mulakannya dengan fungsi luaran z.SomeFunc. Kemudian, minta pakej anda memanggil zSomeFunc dan bukannya z.SomeFunc.

var zSomeFunc = z.SomeFunc

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

Kini, dalam ujian anda, anda boleh menetapkan fungsi lain kepada zSomeFunc, fungsi yang ditakrifkan dalam ujian dan mengembalikan nilai yang dipratentukan atau melakukan tindakan tertentu. Ini membolehkan anda mengejek kelakuan fungsi luaran untuk tujuan ujian.

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

    zSomeFunc = func() int {
        // Do whatever you want to do and return whatever value you need.
        return 1
    }

    // Call the tested function.
    abc()

    // Test the expected behavior.
}

Sebagai alternatif, anda boleh membuat pelaksanaan olok-olok pakej x.y.z dan menggunakan Rangka Kerja Go Mocking untuk mengejek fungsi SomeFunc() secara khusus .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Fungsi Pakej 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