Menguji Koleksi Fungsi dengan Refleksi dalam Go
Masalah
Unit menguji set fungsi dengan tandatangan yang serupa dan nilai pulangan boleh menjadi berulang dan menyusahkan. Pendekatan tradisional melibatkan penulisan ujian individu untuk setiap fungsi, yang boleh membawa kepada pertindihan kod. Reflection menawarkan penyelesaian untuk menyelaraskan proses ini.
Penyelesaian Menggunakan Refleksi
Untuk memanfaatkan refleksi dalam ujian anda:
Kod Contoh
<code class="go">var funcNames = []string{"Func1", "Func2", "Func3"} func TestFunc(t *testing.T) { stype := reflect.ValueOf(s) for _, fname := range funcNames { fmt.Println(fname) sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) val := ret[0].Int() if val < 1 { t.Error(fname + " should return positive value") } if !ret[1].IsNil() { t.Error(fname + " shouldn't err") } } }</code>
Nota: Jika tidak sah nama fungsi ditentukan, ujian akan panik. Untuk mengurangkan perkara ini:
<code class="go">for _, fname := range funcNames { defer func() { if x := recover(); x != nil { t.Error("TestFunc paniced for", fname, ": ", x) } }() fmt.Println(fname) }</code>
Atas ialah kandungan terperinci Bagaimanakah Refleksi Memperkemas Ujian Unit untuk Fungsi dengan Tandatangan Serupa dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!