Maison >développement back-end >Golang >Comment capturer et tester la sortie du journal dans les tests Go ?

Comment capturer et tester la sortie du journal dans les tests Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 02:25:02241parcourir

How to Capture and Test Log Output in Go Tests?

Accès à la sortie du journal dans les tests Go

Dans Go, le package de journaux fournit un moyen pratique de consigner les messages. Cependant, lors de l'écriture de tests qui interagissent avec du code qui génère des messages de journal, tester ces messages peut devenir un défi.

Considérez la fonction suivante readByte qui enregistre une erreur lorsqu'elle est rencontrée :

func readByte(/*...*/) {
    // ...
    if err != nil {
        fmt.Println("ERROR")
        log.Print("Couldn't read first byte")
        return
    }
    // ...
}

Dans un fichier de test correspondant, vous pouvez tenter de vérifier la sortie d'erreur en utilisant :

c.Assert(OUTPUT, check.Matches, "teste")

Cependant, cette approche ne fonctionnera pas puisque la variable OUTPUT n'a pas accès au tampon de journal. Pour résoudre ce problème, vous pouvez utiliser une méthode pour capturer la sortie du journal pendant le test.

Capturer la sortie du journal

Une approche pour capturer la sortie du journal consiste à rediriger temporairement le sortie standard où le journal est imprimé. Ceci peut être réalisé via la fonction log.SetOutput, comme démontré dans l'exemple suivant :

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    // Update output to write to the buffer
    log.SetOutput(&buf)
    // Reset output to original after test
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    // Verify the buffer contains the expected log message
    t.Log(buf.String())
}

L'exécution du test produira une sortie similaire à :

ERROR
Couldn't read first byte

Cela montre comment vous peut accéder et vérifier efficacement la sortie des journaux dans vos tests Go, vous permettant de tester en profondeur le comportement du code qui génère des journaux.

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