如何使用“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中文网其他相关文章!