Go语言 测试与文档

304 阅读2分钟

go中的测试基础

相对于其他语言,go语言写一些测试代码是非常容易的,不需要引入其他任何框架 就可以很方便的完成一些单元测试

比如说 我们写一个简单的add 函数

package main

func Add(a int, b int) int {
   return a + b
}

我们想测试一下这个函数

package main

import "testing"

func TestAdd(t *testing.T) {
   tests := []struct{ a, b, c int }{
      {1, 2, 3},
      {4, 5, 9},
      {0, 3, 3},
   }

   for _, tt := range tests {
      if actual := Add(tt.a, tt.b); actual != tt.c {
         t.Errorf("err add (%d %d) got %d", tt.a, tt.b, tt.c)
      }
   }
}

稍微注意一下命名 image.png

go语言中 我们一般是把测试的代码 命名为 xxx_test.go 同时函数的名字Test开头

image.png

可以看出来 虽然没有main函数 但是ide还是很智能的 给了我们可运行的标记

看下结果:

image.png

嗯 我们故意搞一个错误的数据 看看报错信息

image.png

有时候我们目录下可能有很多个test 都要跑,一个个run过去 很累,其实用命令也是可以的

go test .

image.png

甚至你还可以看到 代码覆盖率的 结果:

image.png

你甚至还能方便的进行 benchmark

func BenchmarkAdd(b *testing.B) {
   // todo  复杂的性能测试
}

有时候 我们 在测试的时候 还需要准备一些测试数据,准备测试数据的时候还也会耗时,所以我们在数据准备完毕以后 可以调用如下代码,这样性能测试的时间点 就会在测试数据准备之后了 会非常准确

b.ResetTimer()

在goland中也将对应的go命令都封装好了 可以很方便的在ide中 对cpu 内存 等进行测试,将结果进行输出

一般情况下 做调优的时候 遵循下面的顺序

  1. cpuprofile 获取性能数据
  2. go tool pprof 查看性能数据
  3. 分析慢在哪里
  4. 优化代码

其实所有语言的性能调优都是这个流程,只是其他语言 都是要自己找一些三方库来做,而go语言直接内置了这些模块 非常方便,上手难度极低

另外对于http服务区来说,go语言还提供了内置的httptest库,方便大家测试自己的http服务器(性能和效率)

go 生成文档和代码

go doc 是生成文档,而 godoc是查看文档,要记住这2个命令

首先安装一下 gotools go install golang.org/x/tools/...@latest 然后运行下命令

image.png

那马上就可以看到对应的go doc 甚至 包括自己的代码也会自动生成 image.png

因为我们自己没有写注释 所以自然没有文档

image.png

go中的注释十分简单 只要 // 即可。不用像java语言中 那么麻烦

另外还可以给 go的函数 写一些例子代码,Example开头 即可,这样go doc也会自动 将你的例子代码 输出。