Maison > développement back-end > Golang > Comment tester efficacement les fonctions Go à l'aide de « log.Fatal() » ?

Comment tester efficacement les fonctions Go à l'aide de « log.Fatal() » ?

Mary-Kate Olsen
Libérer: 2024-12-09 10:59:11
original
879 Les gens l'ont consulté

How to Effectively Test Go Functions Using `log.Fatal()`?

Test des fonctions Go contenant log.Fatal()

Considérez un scénario dans lequel vous avez une fonction Go utilisant log.Fatal() pour imprimer messages. Tester de telles fonctions peut être difficile car log.Fatal() déclenche os.Exit(1), provoquant des échecs de test.

Approche :

Pour surmonter ce défi, il est Il est conseillé d'implémenter un enregistreur personnalisé qui redirige les sorties vers leurs destinations standard log.xxx(). Cependant, pendant les tests, vous pouvez facilement échanger des fonctions telles que log.Fatalf() avec vos propres implémentations qui n'invoquent pas os.Exit(1).

Exemple :

Supposons que nous ayons le code suivant qui imprime les journaux :

package main

import (
    "log"
)

func hello() {
    log.Print("Hello!")
}

func goodbye() {
    log.Fatal("Goodbye!")
}

func init() {
    log.SetFlags(0)
}

func main() {
    hello()
    goodbye()
}
Copier après la connexion

Pour tester ce code, nous pouvons formuler des hypothèses tests :

package main

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


func TestHello(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)

    hello()

    wantMsg := "Hello!\n"
    msg := buf.String()
    if msg != wantMsg {
        t.Errorf("%#v, wanted %#v", msg, wantMsg)
    }
}

func TestGoodby(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)

    goodbye()

    wantMsg := "Goodbye!\n"
    msg := buf.String()
    if msg != wantMsg {
        t.Errorf("%#v, wanted %#v", msg, wantMsg)
    }
}
Copier après la connexion

Remarque :

Cette approche offre une flexibilité dans le remplacement de fonctions spécifiques de l'enregistreur pendant les tests, permettant une personnalisation du comportement sans affecter la fonctionnalité de la fonction d'origine en cours de test. 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
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