Go进阶之测试篇 | 青训营笔记

143 阅读2分钟

代码测试是评估程序性能的重要手段,通过其获得的各种数据,我们可以客观地了解到程序的优劣以及可以改进的方面。

测试的种类

  • 回归测试:用户通过终端手动回归一些固定的主流程场景,比如:刷视频,网购,打游戏等等。
  • 集成测试:对系统功能维度做测试验证。
  • 单元测试:测试开发阶段,开发者对单独的函数,模块做功能验证。

从上至下,测试成本逐渐降低,覆盖率则提升,因此作为开发者,掌握单元测试的要点,能够对自己的程序有更加全面的了解。

go test

下面是使用标准库testing进行单元测试的一个例子:(文件名假设为xxx.go,那么测试文件名为xxx_test.go)

package main

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

测试文件

package main

import "testing"

func TestAdd(t *testing.T) {
   if ans := Add(1, 2); ans != 3 {
      t.Errorf("1 + 2 expected be 3, but %d got", ans)
   }

   if ans := Add(-10, -20); ans != -30 {
      t.Errorf("-10 + -20 expected be -30, but %d got", ans)
   }
}

在命令行输入go test xxx.go xxx_test.go或者在编译器中直接运行测试函数(运行时需要将程序的run_kind改为package类型),输出如下:

ok command-line-arguments 0.207s

表示测试通过,若不通过,则会按照测试函数中的逻辑返回报错信息。

测试覆盖率

覆盖率是度量测试完整性的一个手段,是测试有效性的一个度量。通过已执行代码表示,用于可靠性、稳定性以及性能的评测。

测试覆盖是对测试完全程度的评测。测试覆盖是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的。建立在对测试结果的评估和对测试过程中确定的变更请求(缺陷)的分析的基础上。————百度百科

简单来说,覆盖率就是评估测试用例是否充分“考验”了程序,举个例子,我们写了一个辨别正负数的程序,如果测试用例全部都是正数,那么程序是否能辨别负数是未知的。

一般来说,覆盖率=测试用例跑过的代码行数/程序总行数*100%

我们也可以用go test xxx.go xxx_test.go --cover 命令来查看该测试的覆盖率。

在实际应用中,测试覆盖率达到50~60%则可以视为测试成功,达到80%以上则是较高水平。

总结

今天收获了对程序进行测试的技能知识,了解到程序的开发者对程序的测试是至关重要的。