"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 puedo probar con precisión `os.exit ()` en Go y mantener la cobertura de código?

¿Cómo puedo probar con precisión `os.exit ()` en Go y mantener la cobertura de código?

Publicado el 2025-03-13
Navegar:835

How Can I Accurately Test `os.Exit()` in Go and Maintain Code Coverage?

probando escenarios de OS.Exit en la información de cobertura (coveralls.io/goveralls)

Enfoque modificado para una cobertura precisa

para abordar esta limitación, se propone un enfoque de prueba modificado. En lugar de revocar el binario, las pruebas se realizan modificando la función os.exit () o log.fatalf () para capturar códigos de salida o registros de errores.

modificado foo/bar.go:

paquete foo foo importar ( "FMT" "OS" ) var osexit = os.exit func crasher () { FMT.Println ("¡Va por llamas!") Osexit (1) }

package foo

import (
    "fmt"
    "os"
)

var osExit = os.Exit

func Crasher() {
    fmt.Println("Going down in flames!")
    osExit(1)
}

paquete foo importar "prueba" FUNC TestCrasher (t *testing.t) { // Guardar la función actual y restaurar al final: Oldosexit: = Osexit Diferir func () {oSexit = Oldosexit} () var Got Got int myExit: = func (código int) { Got = Código } Osexit = myExit Crasher () Si exp: = 1; Got! = exp { T.errorf ("Código de salida esperado: %D, Got: %D", Exp, Got) } }

Este enfoque permite que las herramientas de cobertura rastreen con precisión la ejecución de OS.exit () y aseguren que los casos de prueba en los que las rutinas salgan con os.exit () están cubiertos en los resultados de la prueba.
package foo

import "testing"

func TestCrasher(t *testing.T) {
    // Save current function and restore at the end:
    oldOsExit := osExit
    defer func() { osExit = oldOsExit }()

    var got int
    myExit := func(code int) {
        got = code
    }

    osExit = myExit
    Crasher()
    if exp := 1; got != exp {
        t.Errorf("Expected exit code: %d, got: %d", exp, got)
    }
}

conclusión

El enfoque modificado de las pruebas de prueba con exits y la información de cobertura de la actualización, proporcionando una solución completa para la información de la solución completa, proporcionando una solución completa para una solución completa para una solución completa para una solución completa para una solución completa para una solución completa para una solución completa para una solución completa para la información de las pruebas de prueba con el enfoque de las pruebas de exit con exits y la actualización de la actualización. OS.Exit () escenarios mientras mantiene informes de cobertura precisos.

Ú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