这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
一、本堂课重点内容:
- 测试
二、详细知识点介绍:
- 测试
首先,放上一些项目开发中遇到的事故。
- 营销配置错误,导致非预期用户享受权益,资金损失10w+
- 用户体现,幂等失效,短时间可以多次提现,资金损失20w+
- 代码逻辑错误,广告位被占,无法出广告,收入损失500w+
- 代码指针使用错误,导致APP不可用,损失上kw+
从上述事故我们可以看出测试的重要性。测试是避免事故的最后一道屏障。
测试大致分为三种类型:
- 回归测试
- 集成测试
- 单元测试
从上到下,覆盖率逐层变大,成本却逐层降低。
3.1 单元测试
单元测试的通俗理解即为功能测试。
对某个单一测试单元进行输入,将输出与期望输出进行比较来确定是否有错误。
3.1.1 单元测试——规则
- 所有测试文件以_test.go结尾
- 测试函数命名:func TestXxx(*testing.T)
func TestPublishPost(t *testing.T){}
- 初始化逻辑放到TestMain中
func TestMain(m *testing.M){
//测试前:数据装载,配置初始化等前置工作
code := m.Run()
//测试后:释放资源等收尾工作
os.Exit(code)
}
3.1.2 单元测试——例子
函数:
func HelloTom() string{
return "Jerry"
}
测试函数:
func TestHelloTom(t *testing.T){
output := HelloTom()
expectOutput := "Tom"
if output != expectOutput {
t.Errorf("Expected %s do not match actual %s", expectOutput, output)
}
}
3.1.3 单元测试——运行
go test [flags][packages]
3.1.4 单元测试——assert
有很多开源的assert包可以帮助我们实现equal和not equal的一些比较。
3.1.5 单元测试——覆盖率
代码覆盖率在一定程度上衡量了项目的测试水准以及项目是否达到了高水准测试等级。
下面是代码覆盖率的两个例子:
Tips:
- 一般覆盖率:50%~60%,较高覆盖率80%+。
- 测试分支相互独立、全面覆盖。
- 测试单元粒度足够小,函数单一职责。
三、引用参考: