如何使用「testing」套件在 Go 測試中列印偵錯資訊?
在編寫 Go 測試時,有時很有用列印偵錯資訊以幫助了解程式碼的行為。但是,使用 fmt.Println() 列印到標準輸出在測試中不起作用。這是因為測試輸出被緩衝,並且僅在測試失敗時才列印。
「testing」套件提供了兩種列印除錯資訊的替代方法:
這些方法類似於fmt.Print() 和fmt.Printf(),但它們將輸出直接寫入測試日誌。若要啟用日誌記錄,您需要在執行 go test 時指定 -v(詳細)標誌:
go test -v
這會將所有日誌訊息列印到標準輸出,包括來自成功測試的日誌訊息。
這是如何使用t.Log() 和t.Logf() 的範例:
func TestPrintSomething(t *testing.T) { t.Log("Say hi") t.Logf("The value of myVar is %d", myVar) }
使用-v 執行此測試時,將列印以下輸出:
=== RUN TestPrintSomething Say hi The value of myVar is 1234 --- PASS: TestPrintSomething (0.00s)
您也可以使用t.Error() 列印錯誤訊息。這將導致測試失敗。
這裡是如何使用t.Error() 的範例:
func TestPrintSomething(t *testing.T) { if myVar != 1234 { t.Errorf("The value of myVar is %d, but it should be 1234", myVar) } }
當使用-v 執行此測試時,以下輸出將是print:
=== RUN TestPrintSomething The value of myVar is 4567, but it should be 1234 --- FAIL: TestPrintSomething (0.00s)
testing套件也提供了testing.B類型用於基準測試。 test.B 類型有一個 Log() 方法,其運作方式類似於 t.Log()。
以下是如何使用 B.Log() 的範例:
func BenchmarkSomething(b *testing.B) { for i := 0; i < b.N; i++ { // Do something b.Log("The value of i is", i) } }
何時使用 go test -v 執行此基準測試,將列印以下輸出:
=== RUN BenchmarkSomething The value of i is 0 The value of i is 1 The value of i is 2 The value of i is 3 ... The value of i is 1000 --- BENCH: BenchmarkSomething 1000000000000000000/s
以上是如何使用「testing」套件在 Go 測試中列印偵錯資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!