Maison > développement back-end > Golang > le corps du texte

Comment tester la sortie enregistrée dans les tests Go sans modifier la fonction ?

DDD
Libérer: 2024-11-11 07:28:03
original
195 Les gens l'ont consulté

How to Test Logged Output in Go Tests Without Modifying the Function?

Test de la sortie enregistrée dans les tests Go

Dans Go, les tests unitaires impliquent souvent de vérifier la sortie ou les journaux générés par la fonction testée. Supposons que nous ayons une fonction qui enregistre les erreurs dans certains scénarios.

Le problème :

Étant donné la fonction suivante, readByte qui enregistre un message d'erreur :

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

Comment pouvons-nous tester l'erreur de sortie dans readByte à l'aide d'un test go sans modifier la fonction elle-même ?

La solution :

Pour capturer la sortie du journal, nous peut rediriger la sortie du package de journaux vers un tampon temporaire pendant le test, puis affirmer le contenu du tampon.

Exemple de code :

Dans readbyte_test.go file :

package main

import (
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
    "testing"
)

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

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    t.Logf("Output: %s", buf.String())
}
Copier après la connexion

Exemple de sortie :

$ go test -v readbyte_test.go
=== RUN   TestReadByte
--- PASS: TestReadByte (0.00s)
        readbyte_test.go:30: Output: ERROR
        Couldn't read first byte
PASS
ok      command-line-arguments  0.004s
$ 
Copier après la connexion

Dans cet exemple, les messages d'erreur de sortie peuvent maintenant être testés et vérifiés à l'aide des outils de test intégrés de Go sans altérer la fonction readByte d'origine.

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