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() ?

DDD
Libérer: 2024-12-10 14:47:12
original
139 Les gens l'ont consulté

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

Test des fonctions Go avec log.Fatal()

Il est courant dans les applications Go d'utiliser log.Fatal() pour enregistrer les erreurs critiques puis terminez immédiatement le programme. Bien que ce comportement soit utile dans les environnements de production, il pose des problèmes lors des tests. Voici comment vous pouvez surmonter ce défi :

Enregistreur personnalisé pour les tests

Une approche consiste à implémenter un enregistreur personnalisé qui redirige les messages de journal vers un tampon prédéfini. Cela vous permet de tester la fonctionnalité de journalisation sans que le programme ne se termine à cause de log.Fatal().

// logger.go contains a testing logger that implements *log.Logger
type TestingLogger struct {
    b bytes.Buffer
}

// Println implements log.Print methods, writing to a buffer instead of stdout.
func (l *TestingLogger) Println(args ...interface{}) {
    l.b.WriteString(fmt.Sprintln(args...))
}

// String returns the buffered log messages.
func (l *TestingLogger) String() string {
    return l.b.String()
}
Copier après la connexion

Exemple de test

Avec l'enregistreur personnalisé en place, vous pouvez procéder au test de la fonctionnalité de journalisation comme suit :

package main

import (
    "bytes"
    "log"
    "testing"
)

// Set up the custom logger for testing.
var logger = &logger.TestingLogger{}

func init() {
    log.SetOutput(logger)
}

func TestGoodbye(t *testing.T) {
    // Call the function to be tested.
    log.Fatal("Goodbye!")

    // Verify the expected log message was written to the buffer.
    wantMsg := "Goodbye!\n"
    if logger.String() != wantMsg {
        t.Errorf("Expected: %s, Got: %s", wantMsg, logger.String())
    }
}
Copier après la connexion

En séparant la fonctionnalité de journalisation de la fin du programme et en capturant les messages du journal dans un tampon, vous peut tester efficacement n'importe quel code qui utilise log.Fatal() sans provoquer l'échec du test.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal