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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 16:48:03953Durchsuche

How to Capture and Verify Log Output in Go Tests?

Zugriff auf Protokolle in Go-Tests

Bei Go-Tests kann die Überprüfung der Protokollausgabe einer Funktion eine Herausforderung sein, insbesondere wenn die Funktion selbst protokolliert den Fehler direkt.

Um die Protokollausgabe zu erfassen, besteht eine gängige Lösung darin, die Standardprotokollausgabe in einen Puffer umzuleiten, bevor die zu testende Funktion ausgeführt wird.

Beispiel:

Betrachten Sie die folgende readByte-Funktion:

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

Um die Protokollausgabe zu testen, können wir den folgenden Ansatz in der Testdatei verwenden:

package main

import (
    "bytes"
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    output := buf.String()
    assert.Contains(t, output, "Couldn't read first byte")
}

In diesem Beispiel , wir:

  • Erstellen Sie einen Puffer, um die Protokollausgabe zu erfassen.
  • Leiten Sie die Standardprotokollausgabe mithilfe von log.SetOutput(&buf) in den Puffer um.
  • Ausführen die readByte-Funktion.
  • Stellen Sie die Standardprotokollausgabe in os.Stderr mit defer func() wieder her, um Auswirkungen auf nachfolgende Tests zu verhindern.
  • Stellen Sie die erwartete Protokollmeldung mit testify/assert sicher.

Das obige ist der detaillierte Inhalt vonWie erfasst und überprüft man die Protokollausgabe 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