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

Comment puis-je tester efficacement les paniques en Go ?

Susan Sarandon
Libérer: 2024-12-05 15:19:09
original
472 Les gens l'ont consulté

How Can I Effectively Test for Panics in Go?

Test de panique dans Go

Lors de l'écriture de tests dans Go, la vérification des paniques peut être une technique utile. Cependant, contrairement à Java, Go n'a pas de syntaxe explicite pour gérer les paniques de manière sélective.

Considérez l'exemple suivant :

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")
}
Copier après la connexion

Ce code tente de récupérer de toute panique dans OtherFunctionThatPanics à l'aide de la fonction de récupération. . Cependant, il peut être difficile de déterminer si la fonction a paniqué ou si aucune panique ne s'est produite.

Solution

L'approche recommandée consiste à se concentrer sur les tests d'absence d'une panique. Ceci peut être réalisé en inversant la logique et en garantissant qu'une panique se produit si prévu :

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

    // Code under test
    OtherFunctionThatPanics()
}
Copier après la connexion

De plus, des cadres de tests plus avancés tels que Ginkgo ou Gomega fournissent des matchers intégrés pour affirmer l'apparition de paniques :

Expect(OtherFunctionThatPanics).To(Panic())
Copier après la connexion

Fonctions utilitaires

Pour plus de commodité, vous pouvez créer un générique fonction d'affirmation de panique :

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

Cette fonction peut être utilisée comme suit :

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal