"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como testar com eficiência a situação de pânico em Go?

Como testar com eficiência a situação de pânico em Go?

Postado em 2025-04-19
Navegar:731

How Can I Effectively Test for Panics in Go?

Testando para pânico em go

Ao gravar testes em go, a verificação de pânico pode ser uma técnica útil. No entanto, diferentemente do Java, o GO não possui sintaxe explícita para lidar com o pânico seletivamente. adiar func () { se r: = recuperar (); r! = nil { fmt.println ("recuperado em f", r) } } () OtherFunctionThatpanics () t.errorf ("O código não entrou em pânico") }

Este código tenta se recuperar de qualquer pânico em outras funções, usando a função Recuperação. No entanto, pode ser um desafio determinar se a função entrou em pânico ou se não ocorreu pânico. Isso pode ser conseguido invertendo a lógica e garantindo que ocorra um pânico se esperado:

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")
}

Além disso, estruturas de testes mais avançadas, como Ginkgo ou Gomega, fornecem partidas embutidas para afirmar a ocorrência de pânico:

espera (outros FunctionThatpanics) .to (panic) pode criar uma função genérica para afirmar pânico:

func assertpanic (t *testing.t, f func ()) { adiar func () { se r: = recuperar (); r == nil { t.errorf ("O código não entrou em pânico") } } () f () }

Esta função pode ser usada da seguinte Assertpanic (T, OtherFunctionthatpanics) }
            
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3