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!