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 | 将那些运行时间较长的测试用例运行时间缩短 |