Go语言入门(2) | 青训营笔记

83 阅读2分钟

课程目录

  1. 语言进阶
  2. 依赖管理
  3. 测试
  4. 项目实战

测试

测试是避免事故的最后一道屏障,只要我们做好完备的测试,就可以避免事故的发生。

测试一般分为,回归测试、集成测试和单元测试。回归测试一般是同学手动通过终端回归一些固定的主流程场景。集成测试是对系统功能维度做测试验证;而单元测试测试开发阶段,开发者对单独的函数、模块做功能验证,层级从上至下,测试成本逐渐减低,测试覆盖率逐步上升,所以单元测试的覆盖率一定程度上决定代码的质量。

单元测试

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。简单说,就是将测试用例的运行结果与预期结果进行比较。

单元测试主要包括,输入,测试单元,输出,以及校对,单元的概念比较广,包括接口,函数,模块等;用最后的校对来保证代码的功能与我们的预期相符;单侧一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有bug的情况下,通过编写单测,可以在一个较短周期内定位和修复问题。

image.png Go有testing测试包,配合go test命令能够进行单元测试。

  1. 测试文件以_test.go结尾
  2. 在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中
  3. _test.go文件包含TestXxx函数
  4. 形参类型必须为*test.T
  5. PASS表示测试用例运行成功,FAIL表示失败

举例子,在package main里定义一个函数Add,求两个数之和的函数,然后我们使用单元测试进行求和逻辑测试。

main.go

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

main_test.go

func TestAdd(t *testing.T) {
   sum := Add(1,2)
   if sum == 3 {
       t.Log("the result is ok")
   } else {
       t.Fatal("the result is wrong")
   }
}

然后在终端的项目目录下运行go test -v就可以看到测试结果了。

➜  hello go test -v
=== RUN   TestAdd
--- PASS: TestAdd (0.00s)
       main_test.go:26: the result is ok
PASS
ok      flysnow.org/hello       0.007s

有测试成功PASS标记,并且打印出我们想要的结果。

Tips:

  1. 一般要求覆盖率:50%-60%,较高覆盖率80%+。
  2. 测试分支相互独立、全面覆盖。
  3. 测试单元粒度足够小,函数单一职责。