Heim >Backend-Entwicklung >Golang >Wie erfasst und testet man die Protokollausgabe in Go-Tests?
Zugriff auf die Protokollausgabe in Go-Tests
In Go bietet das Protokollpaket eine praktische Möglichkeit, Nachrichten zu protokollieren. Wenn Sie jedoch Tests schreiben, die mit Code interagieren, der Protokollnachrichten generiert, kann das Testen dieser Nachrichten zu einer Herausforderung werden.
Bedenken Sie die folgende Funktion readByte, die einen Fehler protokolliert, wenn sie auftritt:
func readByte(/*...*/) { // ... if err != nil { fmt.Println("ERROR") log.Print("Couldn't read first byte") return } // ... }
In Wenn Sie eine entsprechende Testdatei haben, können Sie versuchen, die Fehlerausgabe zu überprüfen, indem Sie Folgendes verwenden:
c.Assert(OUTPUT, check.Matches, "teste")
Dieser Ansatz funktioniert jedoch nicht, da die Variable OUTPUT nicht vorhanden ist Zugriff auf den Protokollpuffer. Um dieses Problem zu beheben, können Sie eine Methode zum Erfassen der Protokollausgabe während des Tests verwenden.
Erfassen der Protokollausgabe
Ein Ansatz zum Erfassen der Protokollausgabe besteht darin, die Protokollausgabe vorübergehend umzuleiten Standardausgabe, wo das Protokoll gedruckt wird. Dies kann durch die Funktion log.SetOutput erreicht werden, wie im folgenden Beispiel gezeigt:
func TestReadByte(t *testing.T) { var buf bytes.Buffer // Update output to write to the buffer log.SetOutput(&buf) // Reset output to original after test defer func() { log.SetOutput(os.Stderr) }() readByte() // Verify the buffer contains the expected log message t.Log(buf.String()) }
Das Ausführen des Tests erzeugt eine Ausgabe ähnlich der folgenden:
ERROR Couldn't read first byte
Dies zeigt, wie Sie können innerhalb Ihrer Go-Tests effektiv auf die Protokollausgabe zugreifen und diese überprüfen, sodass Sie das Verhalten des Codes, der Protokolle generiert, gründlich testen können.
Das obige ist der detaillierte Inhalt vonWie erfasst und testet man die Protokollausgabe in Go-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!