Go语言--测试 | 青训营笔记

94 阅读2分钟

测试

go test

在包目录内,所有以_test.go为后缀名的源文件在执行go build时不会被构建成包的一部分,它们是go test测试的一部分。

*_test.go文件中,有三种类型的函数:测试函数、基准测试(benchmark)函数、示例函数。一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确;go test命令会调用这些测试函数并报告测试结果是PASS或FAIL。基准测试函数是以Benchmark为函数名前缀的函数,它们用于衡量一些函数的性能;go test命令会多次运行基准测试函数以计算一个平均的执行时间。示例函数是以Example为函数名前缀的函数,提供一个由编译器保证正确性的示例文档。

单元测试

测试规矩

image.png

测试数据

image.png

功能测试

到对应的目录下,执行以下命令

go test -v

image.png

压力测试(基准测试)

测试一段程序的运行性能以及耗费CPU的程度

image.png

在对应目录下执行

go test -bench=. -benchmem

以Benchmark为开头,入参为* testing.B

用b中的N值反复进行递增循环测试

image.png

基准测试优化

image.png 性能提升了近百倍

覆盖率测试

一般覆盖率:50%~60%,较高覆盖率80%

测试分支相互独立、全面覆盖

测试单元力度足够小,函数单一职责

执行命令

go test -cover

image.png

还可以通过goland测试

image.png

测试的覆盖度正常情况下是跑不满100%,比如说写的代码是来接住panic的等等异常的,那其实就不会走到了。

Mock

工程中复杂的项目,单测要保证稳定性和幂等性

稳定指相互隔离,能在任何时间任何环境进行测试

幂等是指每一次测试运行都应该产生与之前一样的结果,而实现这一目的就要用到mock机制

外部依赖 =》稳定&幂等

在单元测试--文件处理中,如果文件内容修改,而单测是需要依赖本地文件,那么单测会fail,为了保证case的稳定性,我们对读取文件函数进行mock,屏蔽对于文件的依赖

这里采用了Monkey,它是一个开源的mock测试库。

Patch的作用域在Runtime,在运行时通过go的unsafe包,将内存中函数的地址替换为运行时函数的地址,将待打桩函数或方法的实现跳转到

image.png

\