Lorsque vous testez plusieurs fonctions avec des signatures et des valeurs de retour similaires, il est fastidieux d'écrire des tests individuels pour chaque fonction. Dans Go, la réflexion peut fournir une solution pour tester ces fonctions collectivement.
Considérez un ensemble de fonctions (Func1, Func2, ...) avec la signature suivante :
func YourFunction() (int, error)
Goal : Écrivez un test qui parcourt cet ensemble de fonctions, appelle chacune d'elles et teste leurs valeurs de retour pour des conditions spécifiques.
Reflection nous permet d'accéder et de manipuler des valeurs et des fonctions au moment de l'exécution. En créant un objet réflexion.Value pour le récepteur, nous pouvons trouver la fonction correspondante et l'appeler en utilisant réflexion.Value.MethodByName. L'exactitude de la valeur renvoyée peut ensuite être examinée.
Voici un exemple de test qui utilise la réflexion pour tester toutes les fonctions avec l'interface spécifiée :
func TestFunc(t *testing.T) {
var funcNames = []string{"Func1", "Func2", "Func3"}
stype := reflect.ValueOf(s) // receiver
for _, fname := range funcNames {
sfunc := stype.MethodByName(fname)
ret := sfunc.Call([]reflect.Value{})
val := ret[0].Int()
err := ret[1]
if val Gestion des exceptions avec Reflection
Gardez à l'esprit que l'appel d'une fonction inexistante à l'aide de la réflexion provoquera une panique. Pour gérer cela, nous pouvons utiliser des fonctions différées et récupérer pour attraper la panique et fournir des messages d'erreur plus informatifs.
Conclusion
En utilisant la réflexion et en gérant les exceptions de manière appropriée, nous pouvons créer un test unique qui teste efficacement plusieurs fonctions avec un comportement similaire, réduisant ainsi le besoin de code de test répétitif et garantissant la robustesse de nos tests.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3