Go语言测试 | 青训营笔记

55 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

测试

这篇文章重点讲测试

测试的作用不言而喻,是为了项目上线后能具有稳定和安全性,测试就是为了项目上线后防止事故的发生。测试是避免事故的最后一道屏障,所以测试在项目开发中是必然的

三种测试方式: 1.回归测试 2.集成测试 3.单元测试

image.png 这篇文章主要讲单元测试

单元测试 -assert

单元测试规则:

1.所有测试文件以_test.go

2.func TestXxx(*testing T)

testify包:github.com/stretchr/testify/assert

func TestToString(t *testing.T) {
   output := ToString(1)
   expect := "1"
   assert.Equal(t, expect, output)
}

3.初始化逻辑放入TestMain中

func TestMain(m *testing.M) {
   fmt.Println("begin")
   m.Run()
   fmt.Println("end")
}

命令格式:go test [flag][packages]

覆盖率:覆盖就是测试所覆盖的代码范围,覆盖率是依据测试时执行函数的行数 用加--cover参数来查看

image.png

单元测试 -MOCK

有些函数中有外部依赖,所以测试的时候外部依赖如:file,db,cache,断言测试的结果受到外部依赖的影响,所以有了mock模拟测试,从而使的测试变为稳定&幂等。

monkey包:github.com/bouk/monkey

快速MOCK函数:为一个函数打桩为一个方法打桩。

image.png

基准测试

是一种测量和评估软件性能指标的活动,他能评估软件的性能。当需要优化代码时,是一个很好的指标。

命令:go test -bench=.

格式:func() BenchmarkXxxx(b *testing.B)

func BenchmarkSelect(b *testing.B) {
   InitServer()
   //重置时间
   b.ResetTimer()
   for i := 0; i < b.N; i++ {
      Select()
   }
}

func BenchmarkSelectConcurrent(b *testing.B) {
   InitServer()
   b.ResetTimer()
   //并发
   b.RunParallel(func(pb *testing.PB) {
      for pb.Next() {
         Select()
      }
   })
}

测试结果: image.png

总结:

三种测试分别在不同的使用场景下,要依据实际情况去使用,测试十分的重要,它关系到一个软件是否能正常上市,要有测试的习惯。