测试
go test
在包目录内,所有以_test.go为后缀名的源文件在执行go build时不会被构建成包的一部分,它们是go test测试的一部分。
在*_test.go文件中,有三种类型的函数:测试函数、基准测试(benchmark)函数、示例函数。一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确;go test命令会调用这些测试函数并报告测试结果是PASS或FAIL。基准测试函数是以Benchmark为函数名前缀的函数,它们用于衡量一些函数的性能;go test命令会多次运行基准测试函数以计算一个平均的执行时间。示例函数是以Example为函数名前缀的函数,提供一个由编译器保证正确性的示例文档。
单元测试
测试规矩
测试数据
功能测试
到对应的目录下,执行以下命令
go test -v
压力测试(基准测试)
测试一段程序的运行性能以及耗费CPU的程度
在对应目录下执行
go test -bench=. -benchmem
以Benchmark为开头,入参为* testing.B
用b中的N值反复进行递增循环测试
基准测试优化
性能提升了近百倍
覆盖率测试
一般覆盖率:50%~60%,较高覆盖率80%
测试分支相互独立、全面覆盖
测试单元力度足够小,函数单一职责
执行命令
go test -cover
还可以通过goland测试
测试的覆盖度正常情况下是跑不满100%,比如说写的代码是来接住panic的等等异常的,那其实就不会走到了。
Mock
工程中复杂的项目,单测要保证稳定性和幂等性
稳定指相互隔离,能在任何时间任何环境进行测试
幂等是指每一次测试运行都应该产生与之前一样的结果,而实现这一目的就要用到mock机制
外部依赖 =》稳定&幂等
在单元测试--文件处理中,如果文件内容修改,而单测是需要依赖本地文件,那么单测会fail,为了保证case的稳定性,我们对读取文件函数进行mock,屏蔽对于文件的依赖
这里采用了Monkey,它是一个开源的mock测试库。
Patch的作用域在Runtime,在运行时通过go的unsafe包,将内存中函数的地址替换为运行时函数的地址,将待打桩函数或方法的实现跳转到
\