go单元测试

90 阅读2分钟

我正在参加「掘金·启航计划」

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用于报告测试失败和附加的日志信息。\