Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。

go test 命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码都是go test测试的一部分。不会被go build编译到最终可执行文件中。

在*_test.go文件中有三种类型函数。单元测试,基准测试和示例函数

类型 格式 作用
单元测试函数 函数名前缀为Test 测试程序的一些逻辑行为是否正确
基准测试 函数名前缀为Benchmark 测试函数的性能
示例函数 函数名前缀为Example 为文档以提供示例文档

go test 命令会遍历所有的*_test.go文件中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的文件。

Golang单元测试对文件名和方法名,参数都有很严格的要求

1.文件名必须以xx_test.go命名
2.方法必须是Test[^a-z]开头
3.方法参数必须是t *testing.T
4.使用 go test执行单元测试

go的参数解析:

usage: go test [build/test flags] [packages] [build/test flags & test binary flags]
//-c:编译go test称为可执行的二进制文件,但是不运行测试
//-i:安装测试包依赖的package ,但是不运行测试
//build flags 编译运行过程中需要使用到的参数,一般设置为空
//packages  关于包的管理一般设置为空
//flags for test binary 关于go test过程中经常使用到的参数。


参数 作用
-test.v 是否输出全部的单元测试用例(不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例。
-test.bench patten 只跑哪些性能测试用例
-test.benchmem 是否在性能测试的时候输出内存情况
-test.benchtime t :性能测试运行的时间默认是s
-test.cpuprofile cpu.out 是否输出cpu性能分析文件
-test.memprofile mem.out 是否输出内存性能分析文件
-test.blockprofile block.out 是否输出内部goroutine阻塞的性能分析文件
-test.memprofilerate n 内存性能分析的时候有一个分配了多少的时候才打点记录的问题。
-test.blockprofilerate n 基本同上,控制的是
-test.parallel n 性能测试的程序并行cpu数,默认等于GOMAXPROCS
-test.timeout t 如果
-test.cpu 1,2,4 程序运行在哪些CPU上面,使用二进制的1所在位代表,和nginx的nginx_worker_cpu_affinity是一个道理
-test.short 将那些运行时间较长的测试用例运行时间缩短