Go语言工程实践之测试 | 青训营

34 阅读2分钟

测试

单元测试

Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的

go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。

*_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。

类型格式作用
测试函数函数名前缀为Test测试程序的一些逻辑行为是否正确
基准函数函数名前缀为Benchmark测试函数的性能
示例函数函数名前缀为Example为文档提供示例文档

go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件。

规则:

  1. 文件名必须以_test.go结尾
  2. 方法参数必须 t *testing.T
  3. 初始化逻辑放到TestMain中

测试覆盖率是你的代码被测试套件覆盖的百分比。通常我们使用的都是语句的覆盖率,也就是在测试中至少被运行一次的代码占总代码的

Mock测试

Monkey

monkey是是一个开源的mock测试库,可以对method或者实例的方法进行mock反射,指针赋值Monkey Patch的作用域在于Runtime,在运行时通过通过Go的unsafe包,将内存中函数的地址替换为运行时函数被的地址,将待打桩函数或者方法跳转。

基准测试

基准测试就是在一定的工作负载之下检测程序性能的一种方法。基准测试的基本格式如下:

go
复制代码
func BenchmarkName(b *testing.B){
    // ...
}

例如: 为split包中的Split函数编写基准测试如下:

go
复制代码
func BenchmarkSplit(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Split("枯藤老树昏鸦", "老")
    }
}