Maison >développement back-end >Golang >Comment puis-je tester efficacement les paniques dans les tests unitaires Go ?

Comment puis-je tester efficacement les paniques dans les tests unitaires Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-02 12:30:15705parcourir

How Can I Effectively Test for Panics in Go Unit Tests?

Tests de panique dans Go : un guide pratique

Lors de l'écriture de tests unitaires dans Go, il est souvent nécessaire de vérifier qu'un chemin de code spécifique déclenche une panique. Bien que Go fournisse un mécanisme appelé recovery pour gérer les paniques, il n'offre pas de support direct pour spécifier comment ignorer ou exécuter du code spécifiquement en cas de panique.

Pour surmonter cette limitation, nous pouvons utiliser la subtilité que les tests ne définissent pas le concept de réussite, mais seulement d'échec. En profitant de cela, nous pouvons structurer nos tests comme suit :

func TestPanic(t *testing.T) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()

    // The following is the code under test
    OtherFunctionThatPanics()
}

Dans cet exemple, si OtherFunctionThatPanics ne panique pas, la fonction de récupération retournera nil et le test échouera à cause de l'appel à t.Errorf. Si une panique se produit, la récupération la capturera et le test réussira.

Alternativement, nous pouvons créer une fonction d'assistance pour faire abstraction de la logique de vérification de panique :

func assertPanic(t *testing.T, f func()) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()
    f()
}

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}

Ceci Cette approche fournit un moyen concis et réutilisable de gérer les tests de panique dans Go.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn