Maison >développement back-end >Golang >Comment puis-je tester efficacement le comportement de panique en Go ?
Test du comportement de panique dans Go
Lors de la création de tests pour vérifier la gestion de la panique, il peut être difficile de déterminer si une panique s'est produite avec succès ou si la fonction testée n'a pas du tout paniqué. La fonction de récupération de Go permet d'attraper les paniques, mais il lui manque la possibilité de spécifier le code qui doit être exécuté en fonction de la présence ou de l'absence de la panique.
Approche de test traditionnelle
Une L'approche courante consiste à utiliser l'instruction defer pour enregistrer une fonction de récupération qui vérifie la présence d'une panique :
func TestPanic(t *testing.T) { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() OtherFunctionThatPanics() t.Errorf("The code did not panic") }
Cette approche, cependant, ne ne fait pas explicitement la différence entre une panique réussie et aucune panique.
Utiliser Ginkgo ou Gomega
Pour des tests plus robustes, envisagez d'utiliser des bibliothèques comme Ginkgo ou Gomega. Gomega fournit des matchers tels que :
Expect(OtherFunctionThatPanics).To(Panic())
Ce matcher affirme explicitement que la fonction testée devrait paniquer.
Fonction personnalisée pour les assertions de panique
Vous pouvez également créer une fonction personnalisée pour simplifier la vérification de panique :
func TestPanic(t *testing.T) { assertPanic(t, OtherFunctionThatPanics) } func assertPanic(t *testing.T, f func()) { defer func() { if r := recover(); r == nil { t.Errorf("The code did not panic") } }() f() }
Cette fonction enveloppe la fonction de récupération et fournit une indication claire si une panique s'est produite ou non.
En utilisant ces approches, vous pouvez tester efficacement le comportement de panique dans votre code Go, en garantissant que le comportement souhaité est atteint lorsque des erreurs se produisent lors de l'exécution.
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!