Tester pour les paniques dans Go
Lors de l'écriture de tests dans Go, vérifier les paniques peut être une technique utile. Cependant, contrairement à Java, Go n'a pas de syntaxe explicite pour gérer sélectivement les paniques. différer func () { Si r: = récupérer (); r! = Nil { fmt.println ("récupéré en f", r) } } () Autres fonctions tatons () t.errorf ("le code n'a pas paniqué") }
Ce code tente de se remettre de toute panique dans d'autres fonctionnalités en utilisant la fonction de récupération. Cependant, il peut être difficile de déterminer si la fonction paniquait du tout ou si aucune panique ne s'est produite.
func f(t *testing.T) { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() OtherFunctionThatPanics() t.Errorf("The code did not panic") }Solution
L'approche recommandée consiste à se concentrer sur le test pour l'absence de panique. Cela peut être réalisé en inversant la logique et en veillant à ce qu'une panique se produise si elle est attendue: func testpanic (t * test.t) { différer func () { Si r: = récupérer (); r == nil { t.errorf ("le code n'a pas paniqué") } } () // code à tester Autres fonctions tatons () }
De plus, des cadres de test plus avancés tels que Ginkgo ou Gomega fournissent des matchs intégrés pour affirmer la survenue de paniques:
func TestPanic(t *testing.T) { defer func() { if r := recover(); r == nil { t.Errorf("The code did not panic") } }() // Code under test OtherFunctionThatPanics() }
pour les fonctions de conduite
func f(t *testing.T) { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() OtherFunctionThatPanics() t.Errorf("The code did not panic") }des fonctions d'utilité
pour les fonctions d'utilité
func assertPanic(t *testing.T, f func()) { defer func() { if r := recover(); r == nil { t.Errorf("The code did not panic") } }() f() }
Cette fonction peut être utilisée comme suit:
func TestPanic(t *testing.T) { assertPanic(t, OtherFunctionThatPanics) }
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