GO语言学习3 | 青训营笔记

68 阅读2分钟

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

一、本堂课重点内容

1.Go语言单元测试

二、具体内容

1.单元测试的规则

  1. 所有测试文件均以_test.go结尾
  2. 测试函数命名需以Test开始,后面跟测试函数函数名,首字母大写,如func TestXxx(*testing.T)
  3. 运用TestMain可以在测试之前执行前置工作,并在测试后执行首位工作
func TestMain(m *Testing.M){
    //测试前:数据装载、配置初始化等前置工作
    code :=m.Run()
    //测试后:释放资源等收尾工作
    os.Exit(code)
}

2.例子

func HelloTom() string{
    return "Jerry"
}

func TestHelloTom(t *testing.T){
    output:=HelloTom()
    exceptOutput:="Tom"
    if output !=exceptOutput{
        t.Errorf("Except %s do not match actual %s",exceptOutput,output)
    }
}

输出结果:

Except Tom do not match actual Jerry

说明这侧的输出的测试失败,即证明函数出现了问题,需要进行修改。

3.评估单元测试

进行函数测试时会有返回值coverage,即覆盖率,覆盖率是检验测试完备度的一个标准,是测试时被测试函数的行数。在实际项目中,一般的覆盖率为百分之五十到百分之六十,超过百分之八十是较高的覆盖率。

测试函数的分支时应当做到相互独立,全面覆盖,要做到测试单元粒度足够小,函数单一职责。

4.单元测试—Mock

monkey:github.com/bouk/monkey

Patch函数,对一个函数进行一个打桩测试,不再依赖本地文件,可以在任何时间任何环境下进行。

在打桩后可以用unpatch函数对打桩进行修改。

5.基准测试——BenchMark

benchmark类似于test,命名规则为func BenchmarkXxx(*testing.B)

Benchmark可对程序进行压力测试,可以检测每次执行时CPU的耗时

6.项目实战流程

项目的测试需要通过以下三个阶段执行:

需求设计 -> 代码开发 -> 测试运行