Maison > développement back-end > Golang > Comment puis-je tester efficacement les fonctions Go qui utilisent « log.Fatal() » ?

Comment puis-je tester efficacement les fonctions Go qui utilisent « log.Fatal() » ?

Barbara Streisand
Libérer: 2024-12-09 17:09:10
original
299 Les gens l'ont consulté

How Can I Effectively Test Go Functions That Use `log.Fatal()`?

Test des fonctions Go avec log.Fatal()

Dans Go, il peut être difficile de tester des fonctions qui utilisent log.Fatal() , car il appelle directement os.Exit(1), provoquant des échecs de test. Voici comment résoudre ce problème :

Créez un enregistreur personnalisé qui hérite de log.Logger mais remplace la méthode log.Fatal() :

package main

import (
    "log"
    "os"
)

type TestLogger struct {
    *log.Logger
}

func (l *TestLogger) Fatal(v ...interface{}) {
    l.Output(2, fmt.Sprint(v...))
}

func (l *TestLogger) Fatalf(format string, v ...interface{}) {
    l.Output(2, fmt.Sprintf(format, v...))
}
Copier après la connexion

Remplacez l'enregistreur standard par votre enregistreur personnalisé dans vos cas de test :

import (
    "bytes"
    "github.com/YourPackage/logging"
)

func TestFunctionWithLogFatal(t *testing.T) {
    buffer := new(bytes.Buffer)
    testLogger := logging.NewTestLogger(buffer)
    log.SetOutput(testLogger)

    // Call the function under test here

    output := buffer.String()
    // Assert that the output contains the expected log message
}
Copier après la connexion

En remplaçant la méthode log.Fatal() dans l'enregistreur personnalisé, vous pouvez gérer les messages de journal sans réellement quitter le processus de test. Au lieu de cela, ils sont capturés dans l’objet tampon fourni pour vérification. Cela vous permet de tester les fonctions qui utilisent efficacement log.Fatal().

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!

source:php.cn
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