Maison  >  Article  >  développement back-end  >  Comment tester la sortie enregistrée dans les tests Go sans modifier la fonction ?

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

DDD
DDDoriginal
2024-11-11 07:28:03196parcourir

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
    }
    // ...
}

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

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
$ 

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!

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