go test

在 Java 中有 Junit,用于 Java 的单元测试,同理,在 Go 语言中也有类似的测试 testing,它是通过 go test 命令提供了对 Go 语言程序的测试能力。

1、go test 命令

go test 命令,会自动测试对应包目录下名为 *_test.go 的 go 源文件,并打印出测试结果,测试结果如下面的格式:

   ok   archive/tar   0.011s
   FAIL archive/zip   0.022s
   ok   compress/gzip 0.033s
   ...

例如,测试 test 包下的所有单元测试(*_test.go):

xcbeyond@xcbeyonddeMacBook-Pro test % go test
this is go test.
PASS
ok      golangLearning/test     0.373s

2、Test 函数

Go 语言中测试是基于 golang 标准库 testing 包来支持其自动化测试,并使用 go test 命令来执行。

go test 通过扫描 *_test.go 文件来识别 go 测试源文件,寻找特殊命名规则的函数,并生成一个临时的 main 包来调用它,然后编译和运行,并返回测试结果,最后清空临时文件。

*_test.go 测试源文件中,对函数命名有着特殊的要求,其中有三类函数:

  • 功能测试函数:又叫做单元测试,以 Test 为前缀命名的函数,如,TestHelloworld 函数,常用来测试一些函数逻辑的正确性,go test 执行后以 PASS 还是 FAIL 返回测试结果。
  • 基准测试函数:以 Benchmark 开头的函数,用来测试某些操作的性能,go test 执行后返回平均执行时间。
  • 示例函数:以 Example 开头的函数,用来提供机器检查过的文档。

每一个测试文件必须导入 testing 包,其中测试函数格式如下:

func TestFuncName(t *testing.T) {
   // ……
}

参数 t 提供了测试处理和日志记录的功能。

如,某个工具 utils.go 中存在一个两数函数 NumAdd,进行单元测试如下

package test

import (
    "testing"
)

func TestNumAdd(t *testing.T) {
    got := NumAdd(1, 1)
    if got != 2 {
        t.Errorf("NumAdd(1,1) = %d, want 2", got)
    }
}

go test 执行结果为:

xcbeyond@xcbeyonddeMacBook-Pro test % go test
PASS
ok      golangLearning/test     0.538s
Copyright © xcbeyond.cn 2021 all right reserved,powered by Gitbook Updated at 2021-09-05 19:41:05

results matching ""

    No results matching ""