首页 >后端开发 >Golang >如何使用'testing”包在 Go 测试中打印调试信息?

如何使用'testing”包在 Go 测试中打印调试信息?

Barbara Streisand
Barbara Streisand原创
2024-12-06 07:03:11684浏览

How to Print Debug Information in Go Tests Using the `testing` Package?

如何使用“testing”包在 Go 测试中打印调试信息?

在编写 Go 测试时,有时很有用打印调试信息以帮助了解代码的行为。但是,使用 fmt.Println() 打印到标准输出在测试中不起作用。这是因为测试输出被缓冲,并且仅在测试失败时才打印。

“testing”包提供了两种打印调试信息的替代方法:

  • t.Log()
  • t.Logf()

这些方法类似于 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn