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
Mary-Kate Olsenoriginal
2024-12-09 10:59:11865parcourir

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

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

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!

Déclaration:
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