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

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

Linda Hamilton
Linda Hamiltonasal
2024-12-29 20:51:13977semak imbas

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

Mengejek Fungsi Import dalam Kaedah Bergantung kepada Pakej

Apabila menulis ujian untuk kaedah yang bergantung pada fungsi yang diimport daripada pakej luaran, ejekan boleh menjadi perlu untuk mengasingkan ujian daripada pelaksanaan sebenar fungsi yang diimport. Dalam Go, ini boleh dicapai dengan pemfaktoran semula yang mudah.

Pertimbangkan kaedah berikut yang mengimport dan menggunakan fungsi daripada pakej x.y.z:

import x.y.z

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

Untuk mengejek SomeFunc(), cipta pembolehubah zSomeFunc jenis fungsi, dimulakan dengan fungsi yang diimport:

var zSomeFunc = z.SomeFunc

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

Dalam ujian, anda boleh tetapkan fungsi berbeza kepada zSomeFunc, satu yang ditakrifkan dalam suite ujian itu sendiri, untuk memanipulasi tingkah laku seperti yang diingini:

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
}

Pendekatan ini membolehkan anda mengejek fungsi yang diimport daripada pakej lain dan mengawal kelakuannya semasa ujian, memudahkan pengasingan dan pengesahan kod anda.

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