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

Bagaimanakah Saya Boleh Mengejek Fungsi Luar dalam Go untuk Ujian Unit?

Mary-Kate Olsen
Lepaskan: 2025-01-02 18:57:37
asal
250 orang telah melayarinya

How Can I Mock External Functions in Go for Unit Testing?

Mengejek Fungsi Luar dalam Go

Apabila menguji fungsi yang bergantung pada pakej luaran, mengejek fungsi luaran tersebut boleh menjadi penting untuk mencipta terpencil dan boleh dipercayai ujian. Pertimbangkan contoh berikut:

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}
Salin selepas log masuk

Bolehkah kita mengejek z.SomeFunc() untuk menguji unit abc()?

Penyelesaian: Pemfaktoran Semula dan Mengejek

Ya, mengejek z.SomeFunc() boleh dilakukan dengan pemfaktoran semula yang mudah. Memperkenalkan pembolehubah zSomeFunc jenis fungsi dan mulakannya dengan z.SomeFunc. Kemudian, dalam fungsi anda yang memanggil z.SomeFunc(), gunakan zSomeFunc() sebaliknya:

var zSomeFunc = z.SomeFunc

func abc() {
    // ...
    v := zSomeFunc()
    // ...
}
Salin selepas log masuk

Semasa ujian, tetapkan fungsi tersuai kepada zSomeFunc yang mengembalikan gelagat ujian yang diingini. Contohnya:

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
}
Salin selepas log masuk

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