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!