我正在参加「掘金·启航计划」
1、为什么要写单元测试
- 减少bug
- 提高代码质量
- 放心重构
2、go test工具
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 test的参数详解:
-c: 编译go test称为可执行的二进制文件,但是不运行测试
-i:安装测试包依赖的package,但是不运行测试
-test.v:是否输出全部的单元测试用例(不管成功还是失败),默认没有加上,只输出失败的单元测试用例。
-test.run pattern:只跑哪些单元测试用例。
-test.bench pattern:只跑那些性能测试用例
-test.benchmem:是否在性能测试的时候输出内存情况
-test.benchtime t:性能测试运行的时间,默认是1s
-test.cpuprofile cpu.out:是否输出内存性能分析文件
-test.blockprofile block.out:是否输出内部goroutine阻塞的性能分析文件
-test.parallel n:性能测试的程序并行cpu数,默认等于GOMAXPROCS
-test.timeout t:如果测试用例运行时间超过t,则抛出panic
-test.cpu 1,2,4:程序运行在写cpu上,
3、测试函数
3.1、定义
每个测试函数必须导入testing包,测试函数的基本格式如下
func TestName (t *test.T) {
//...
}
测试函数的名字必须以Test开头,可选的后缀名必须以大写字母开头。其中参数t用于报告测试失败和附加的日志信息。\