这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
测试是避免事故的最后一道屏障
测试分为回归测试、集成测试、单元测试
单元测试
测试单元(测试对象):函数、模块等
流程:对测试单元进行输入,然后获取输出。将输出与期望做校对。
规则
所有测试文件以_test.go结尾
func TestXxx(*testing.T)
所有初始化逻辑放到TestMain
覆盖率
如何衡量代码是否经过了足够的测试? 如何评价项目的测试水准? 如何评估项目是否达到了高水准测试等级?
代码覆盖率
计算方式:测试经过的行数/代码总行数
一般覆盖率:50~60%
较高覆盖率:80%+
提高覆盖率:测试分支相互独立,全面覆盖。
测试单元粒度足够小,函数单一职责。
mock
为了防止存放在本地或云服务器上的测试使用的外部依赖,如输入内容
line11
line22
line33
line44
line55
被篡改或删除,可以使用mock来解决外部依赖被篡改的危险,此时不再依赖本地文件
使用mock来解决外部依赖,为测试函数打桩。
基准测试
优化代码,需要对当前代码分析。
内置的测试框架提供了基准测试的能力。
项目实战
需求描述
社区话题页面
要求:
展示话题(标题、文字描述)和回帖列表
暂不考虑前端页面实现,仅仅实现一个本地web服务
话题和回帖数据用文件存储
需求用例
浏览消费用户user 消费内容:topicpage中的topic和postlist
使用ER图来描述需求
分层结构
数据层:数据model,外部数据的增删改查 逻辑层:业务entiy,处理和谐业务逻辑输出 视图层:试图view,处理和外部的交互逻辑
组件工具
gin高性能web框架
gomod
repository-index
元数据 索引 数据行 内存map