在 Go 測試中存取日誌輸出
在 Go 中,log 套件提供了一種記錄訊息的便捷方法。但是,在編寫與生成日誌訊息的程式碼互動的測試時,測試這些訊息可能會成為一項挑戰。
考慮以下函數readByte,它會在遇到錯誤時記錄錯誤:
func readByte(/*...*/) { // ... if err != nil { fmt.Println("ERROR") log.Print("Couldn't read first byte") return } // ... }
在對應的測試文件,您可以嘗試使用以下方法驗證錯誤輸出:
c.Assert(OUTPUT, check.Matches, "teste")
但是,這種方法將不起作用,因為OUTPUT 變數確實無法存取日誌緩衝區。為了解決這個問題,您可以採用一種方法來擷取測試過程中的日誌輸出。
擷取日誌輸出
擷取日誌輸出的一種方法是暫時重新導向列印日誌的標準輸出。這可以透過log.SetOutput 函數來實現,如下例所示:
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()) }
運行測試將產生類似於以下內容的輸出:
ERROR Couldn't read first byte
這示範如何可以有效地存取和驗證Go 測試中的日誌輸出,使您能夠徹底測試產生日誌的程式碼的行為。
以上是如何在 Go 測試中擷取和測試日誌輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!