"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment tester efficacement la situation de panique en Go?

Comment tester efficacement la situation de panique en Go?

Publié le 2025-04-19
Parcourir:341

How Can I Effectively Test for Panics in Go?

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)
}
Dernier tutoriel Plus>

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