Go语言入门3 | 青训营笔记

60 阅读2分钟

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

测试

测试一般分为:回归测试、集成测试、单元测试。

  • 回归测试一般是手动通过终端回归一些固定的主流程场景;
  • 集成测试是对系统功能维度做测试验证;
  • 而单元测试测试开发阶段,开发者对单独的函数、模块做功能验证。

层级从上至下,测试成本逐渐减低,而测试覆盖率却逐步上升,所以单元测试的覆盖率一定程度上决定着代码的质量。

单元测试

单元测试一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性;另一方面可以提升效率,在代码有bug的情况下,通过编写单元测试,可以在一个较短周期内定位和修复问题。

image.png

1. 单元测试规则

  • 所有测试文件以_test.go结尾,如源代码文件为:hello.go,则测试文件取名为:hello_test.go
  • 测试方法名规定为:func TestXxx(*testing.T),如:
    func TestPublishPost(t *testing.T){
        pass
    }
    
  • 初始化逻辑放到TestMain中
    func TestMain(m *testing.M){
    
          // 测试前:数据装载,配置初始化等前置工作
    
          code := m.Run()
    
          // 测试后:释放资源等收尾工作
    
          os.Exit(code)
      }
    

2. 覆盖率

命令行输入下面的命令测试覆盖率:

go test XXX.go --cover

3. Mock

假设一种场景:我们的单测需要依赖本地的文件,如果文件被修改或者删除测试就会fail。为了保证测试案例的稳定性,我们对读取文件函数进行mock,屏蔽对于文件的依赖。

4. 基准测试

Go 语言还提供了基准测试框架,基准测试是指测试一段程序的运行性能及耗费CPU的程度。而我们在实际项目开发中,经常会遇到代码性能瓶颈,为了定位问题经常要对代码做性能分析,这就用到了基准测试。使用方法类似于单元测试。