Fungsi Pengujian dengan Refleksi dalam Go
Apabila berhadapan dengan tugas menulis ujian unit untuk pelbagai fungsi dengan tandatangan yang serupa dan nilai pulangan, tradisional kaedah boleh membawa kepada pertindihan kod yang berlebihan. Artikel ini meneroka cara menggunakan refleksi untuk menyelaraskan proses ujian dan menghapuskan keperluan untuk ujian berulang.
Menggunakan Refleksi untuk Invokasi Fungsi
Pakej reflect dalam Go menyediakan akses kepada maklumat tentang jenis dan nilai semasa runtime. Untuk menggunakan fungsi menggunakan pantulan, ikuti langkah berikut:
Menguji Nilai Pulangan
Untuk menguji nilai pulangan fungsi, gunakan langkah berikut:
Contoh Lengkap
Coretan kod berikut memberikan contoh lengkap tentang cara menggunakan refleksi untuk menguji koleksi fungsi:
<code class="go">var funcNames = []string{"Func1", "Func2", "Func3"} func TestFunc(t *testing.T) { stype := reflect.ValueOf(s) for _, fname := range funcNames { sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) val := ret[0].Int() err := ret[1].Interface().(error) if val < 1 { t.Error(fname + " should return positive value") } if err != nil { t.Error(fname + " shouldn't err") } } }</code>
Contoh ini berulang pada sekeping nama fungsi, menggunakan pantulan untuk memanggil setiap fungsi dan mengesahkan kedua-dua objek pemulangan dan sebarang kemungkinan ralat.
Dengan menggunakan refleksi dalam ujian anda, anda boleh mengelakkan pengulangan kod, meningkatkan kebolehselenggaraan dan memastikan semua fungsi yang diuji tertakluk pada set keadaan ujian yang sama.
Atas ialah kandungan terperinci Bolehkah Refleksi Memudahkan Menguji Berbilang Fungsi dengan Tandatangan Serupa dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!