测试文件

在 Go 中,测试文件的文件名必须以 _test.go 作为后缀,比如 example_test.go。这种文件中定义的函数必须有 Test 前缀,文件中可以实现多个测试函数,比如 TestDownloadTestUpload。使用 go test 命令可以执行所有的测试函数。

测试函数

在 Go 中,测试函数必须以 Test 为前缀,并且要求返回 nil,否则就会被认为测试失败:func TestXXX(t *testing.T) { ... }。另外,测试函数的参数必须为 *testing.T,这允许测试函数报告失败或者使用测试库。

子测试

如果要在一个测试文件中测试多个函数,可以使用 testing.TRun 方法来将测试分组:t.Run("group", func(t *testing.T) { ... })。这样可以将一组相关测试函数放置在一起,可以清晰的看到测试的执行情况。此外,testing 包还提供了 Parallel 方法可以并行执行测试函数,以提高测试效率。

子测试 例子

示例代码:

func TestExample(t *testing.T) {
    t.Run("group1", func(t *testing.T) {
        // Test code for group1
    })
    t.Run("group2", func(t *testing.T) {
        // Test code for group2
    })
    t.Run("group3", func(t *testing.T) {
        // Test code for group3
    })
}

可以看到,测试组中可以有多个测试函数,它们可以通过 t.Run 方法来分组,以便更好的查看测试结果。

基准测试

函数格式

基准测试可以使用 testing.B 来测量函数的执行效率,函数格式为:func BenchmarkXXX(b *testing.B) { ... }。它的参数 b 实现了一些方法,比如 b.N 表示测试的次数,b.ResetTimer 可以重置计时器,b.StopTimer 可以停止计时器。

Example

示例可以使用 testing.B 来测试示例函数,格式如下:func ExampleXXX() { ... }。它可以检查函数的返回值是否符合预期,以及函数是否会输出一些预期的文本到标准输出。