Heim >Backend-Entwicklung >Golang >Wie erfasst und überprüft man Protokolle in Go-Tests?

Wie erfasst und überprüft man Protokolle in Go-Tests?

Barbara Streisand
Barbara StreisandOriginal
2024-11-21 02:18:11396Durchsuche

How to Capture and Inspect Logs in Go Tests?

Erfassen und Überprüfen von Protokollen in Go-Tests

Um die von einer zu testenden Funktion generierten Protokolle zu überprüfen, ist es wichtig, sie zu erfassen und zu überprüfen. Dies kann erreicht werden, indem die Ausgabe umgeleitet und mit den erwarteten Werten verglichen wird.

Im bereitgestellten Beispiel druckt die readByte-Funktion die Protokollmeldungen auf die Standardausgabe. Um diese Nachrichten im Test zu erfassen, können wir einen bytes.Buffer wie unten gezeigt verwenden:

package main

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

func readByte(/*...*/) {
    // ...
    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.Log(buf.String())
}

Erklärung:

  • The log.SetOutput( &buf) leitet die Protokollausgabe an die buf-Variable um.
  • Die Verzögerung log.SetOutput(os.Stderr) sorgt dafür dass die Protokollausgabe nach den Testläufen an ihrem ursprünglichen Ziel wiederhergestellt wird.
  • Die Zeile t.Log(buf.String()) druckt die erfassten Protokolle im Testprotokoll.

Indem Sie den Inhalt von buf untersuchen, können Sie überprüfen, ob die erwarteten Protokolle von der readByte-Funktion generiert wurden. Mit diesem Ansatz können Sie die Protokollausgabe testen, ohne den Code der zu testenden Funktion zu ändern.

Das obige ist der detaillierte Inhalt vonWie erfasst und überprüft man Protokolle in Go-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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