"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo probar eficientemente la situación de pánico en GO?

¿Cómo probar eficientemente la situación de pánico en GO?

Publicado el 2025-04-19
Navegar:886

How Can I Effectively Test for Panics in Go?

Prueba de pánico en Go

Cuando se escribe pruebas en Go, verificar los pánico puede ser una técnica útil. Sin embargo, a diferencia de Java, GO no tiene una sintaxis explícita para manejar los pánico selectivamente.

Considere el siguiente ejemplo:

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

Este código intenta recuperarse de cualquier pánico en Other FunctionThatPanics usando la función de recuperación. Sin embargo, puede ser difícil determinar si la función entró en pánico o si no se produjo un pánico.

solución

el enfoque recomendado es centrarse en probar la ausencia de un pánico. Esto se puede lograr invirtiendo la lógica y asegurando que ocurra un pánico si se espera:

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

    // Code under test
    OtherFunctionThatPanics()
}

Additionally, more advanced testing frameworks such as Ginkgo or Gomega provide built-in matchers for asserting the occurrence of panics:

Expect(OtherFunctionThatPanics).To(Panic())

Utility Functions

For convenience, Puede crear una función genérica para afirmar pánico:

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

Esta función se puede usar de la siguiente manera:

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3