测试
测试的重要性:关系着系统的质量,是避免事故的最后一道屏障
三种类型
- 回归测试:测试某个功能
- 集成测试:测试某个接口
- 单元测试:测试单独的函数模块
单元测试
- 提升效率:定位问题的效率变快
单元测试的规则
- 所有测试文件以 _test.go 结尾
- 测试函数 func TestXxx(xxx *testing.T)
- 初始化逻辑放到 TestMain() 中(测试前的准备工作和测试后的资源释放等)
-
func TestTest(t *testing.T) {...}
-
覆盖率:一段代码有几行被测试过(跑到过)
func Test2(t *testing.T){ isPass := IsBiggerThan100(120) assert.Equal(t, true, isPass) //一般覆盖率为50%~60% }
-
测试分支应不重不漏、相互独立
-
测试单元粒度得足够小,函数职责单一(单一职责原则)
依赖
- 幂等:重复运行一个测试的结果与之前相同
- 稳定:单元测试能在任何时间、任何函数中运行
MOCK测试
- 作用:模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开(有外部依赖时需要中Mock测试测试稳定性)
-
快速Mock函数
- 为一个函数打桩
- 为一个方法打桩
-
基准测试
- 作用:测试运行时的性能和cpu的损耗
- 使用方法类似于单元测试
-
func BenchXxx(xx *testing.B){ ... b.ResetTimer() //耗时 }
项目实践
步骤
-
需求设计(软件工程导论的内容)
- 需求获取->需求分析->编写规约->需求验证
- 用例分析(用例分析图)
- 实体模型(ER图)
- 数据流图、数据字典
- UML图
- 分层结构:数据层、逻辑层、视图层
-
项目开发
-
测试运行