Apabila menguji berbilang fungsi dengan tandatangan yang serupa dan nilai pulangan, menulis ujian berulang secara manual boleh membosankan. Refleksi menawarkan penyelesaian kepada masalah ini, membolehkan anda menulis satu ujian yang memanggil dan menilai fungsi ini secara dinamik.
Menggunakan Refleksi untuk Ujian Fungsi
Untuk menggunakan refleksi untuk ujian fungsi, ikuti langkah berikut:
Contoh Penggunaan
Kod berikut menunjukkan cara untuk menguji berbilang fungsi bernama "Func1", "Func2", dan "Func3" menggunakan refleksi:
<code class="go">func TestFunc(t *testing.T) { var funcNames = []string{"Func1", "Func2", "Func3"} 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.IsNil() { t.Error(fname + " shouldn't err") } } }</code>
Mengendalikan Fungsi Tidak Wujud
Perhatikan bahawa memanggil fungsi ujian dengan nama fungsi yang tidak wujud akan mengakibatkan panik. Untuk mengendalikan senario ini, anda boleh menambah mekanisme pemulihan pada fungsi ujian:
<code class="go">for _, fname := range funcNames { defer func() { if x := recover(); x != nil { t.Error("TestFunc paniced for", fname, ": ", x) } }() sfunc := stype.MethodByName(fname) ... }</code>
Dengan memanfaatkan refleksi, anda boleh mengautomasikan ujian fungsi dengan tandatangan yang serupa dengan berkesan, mengurangkan keperluan untuk kod ujian berulang.
Atas ialah kandungan terperinci Bagaimanakah Refleksi Boleh Digunakan untuk Menguji Berbilang Fungsi dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!