Test d'une collection de fonctions avec Reflection dans Go
Problème
Test unitaire d'un ensemble de fonctions avec des signatures et des valeurs de retour similaires peuvent devenir répétitives et fastidieuses. Les approches traditionnelles impliquent l'écriture de tests individuels pour chaque fonction, ce qui peut conduire à une duplication de code. Reflection propose une solution pour rationaliser ce processus.
Solution utilisant Reflection
Pour tirer parti de la réflexion dans vos tests :
Exemple de code
<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>
Remarque : Si un code non valide le nom de la fonction est spécifié, le test paniquera. Pour atténuer cela :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!