Wie teste ich die protokollierte Ausgabe in Go-Tests, ohne die Funktion zu ändern?

DDD
Freigeben: 2024-11-11 07:28:03
Original
163 Leute haben es durchsucht

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

Testen der protokollierten Ausgabe in Go-Tests

In Go beinhalten Komponententests häufig die Überprüfung der Ausgabe oder Protokolle, die von der getesteten Funktion generiert werden. Angenommen, wir haben eine Funktion, die Fehler in bestimmten Szenarien protokolliert.

Das Problem:

Gegeben sei die folgende Funktion readByte, die eine Fehlermeldung protokolliert:

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

Wie können wir den Ausgabefehler in readByte mithilfe eines Go-Tests testen, ohne die Funktion selbst zu ändern?

Die Lösung:

Um die Protokollausgabe zu erfassen, haben wir kann die Ausgabe des Protokollpakets während des Tests in einen temporären Puffer umleiten und dann den Inhalt des Puffers bestätigen.

Beispielcode:

Im readbyte_test.go Datei:

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())
}
Nach dem Login kopieren

Beispielausgabe:

$ 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
$ 
Nach dem Login kopieren

In diesem Beispiel können die ausgegebenen Fehlermeldungen jetzt mit den integrierten Testtools von Go getestet und verifiziert werden ohne die ursprüngliche readByte-Funktion zu ändern.

Das obige ist der detaillierte Inhalt vonWie teste ich die protokollierte Ausgabe in Go-Tests, ohne die Funktion zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage