Go工具链之代码测试神器go test详解
作者:路多辛
go test 作用
go test 是 Go 工具链中的一个命令,用于编译和运行按照要求编写的 Golang 测试代码,并生成测试报告。
要求将测试代码所在的文件命名为 *_test.go,如此命名的文件不会被 go build 命令编译,但是会被 go test 进行编译和运行。在 *_test.go 中有几种类型的函数:
- 单元测试函数:以 Test 为函数名的前缀,用于测试程序的逻辑行为,参数必须是t *testing.T,无返回值。
- 基准测试函数:以 Benchmark 为函数名的前缀,用于测试程序的性能,参数必须是 b *testing.B,无返回值。
- 模糊测试函数:以 Fuzz 为函数名的前缀,用于测试程序的健壮性,参数必须是 f *testing.F,无返回值
- 示例函数:以 Example 为函数名的前缀,用于提供示例文档,没有参数和返回值。
go test 使用方法和使用示例
go test 的使用方法比较简单,在项目的根目录或者某个包下直接运行如下命令:
go test
go test 将会编译和运行当前项目或者当前包下所有的测试代码,并输出测试结果。
可以通过指定包或测试文件的路径来运行特定的测试,可以指定多个,也可以使用通配符进行匹配。例如:
go test [packages] go test xxx.go
以下是一些常用的参数说明:
- -v:显示详细的测试输出,包括每个测试用例的名称和结果。
- -run:指定要运行的测试函数的正则表达式。
- -cover:同时进行代码覆盖率分析,显示代码被执行的情况。
- -coverprofile:将代码覆盖率分析的结果输出到指定文件中。
- -count:指定测试的运行次数,默认为 1 次。
- -timeout:设置测试的运行超时时间。
- -bench:运行与性能测试有关的基准测试。
- -benchmem:在运行基准测试时显示内存分配的统计信息。
这里要着重讲解一下 -coverprofile 参数,这个参数可以将测试用例的代码覆盖结果输出到指定文件中,然后可以借助 go tool cover 来做具体的分析。来看一下带上 -coverprofile 参数的效果,以 github.com/luduoxin/json-validator-go 项目为例,clone 代码后,切换到项目的 validator 目录,打开终端,执行如下命令:
$ go test -coverprofile=c.out
截取 c.out 的前两行内容如下:
mode: set github.com/luduoxin/json-validator-go/validator/scanner.go:11.30,15.2 3
第二行每个部分代表的意思如下:
"文件:起始行.起始列,结束行.结束列 该基本块中的语句数量 该基本块被执行到的次数"
搞清楚这个输出内容的格式可以做很多事情,例如自己做工具来统计长时间运行的项目的测试覆盖率,就可以在执行测试用例的过程中,先生成此种格式的文件,然后借助 go tool cover 这个工具来分析。
到此这篇关于Go工具链之代码测试神器go test详解的文章就介绍到这了,更多相关Go工具链go test内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!