这是我参与「第五届青训营 」伴学笔记创作活动的第 3天
学习内容主要有四个部分:go的语言进阶 依赖管理 测试 项目实战。根据课程划分,本篇笔记主要记录后两个部分:测试和项目实战。
测试
生产场景中由于失误可能造成巨大损失,测试是避免事故的最后一道屏障。
测试分为:
回归测试(通过终端回归一些场景)
集成测试(对功能模块测试)
单元测试(对单独的函数模块进行测试)
从上到下,覆盖率变大,成本逐渐降低(单元测试一定程度上代表了代码的质量)
单元测试
包括:输入、测试单元、输出、输出和期望值的校对
作用:验证代码的能力和正确性
结果:保证质量(保证新代码和原有代码的质量)提升效率(可以在较短周期定位问题)
单元测试的规则
所有测试文件以_test.go结尾
命名 func TestXxx(*testing.T)
初始化逻辑放到TestMain中
覆盖率
评估测试的方法,可以衡量代码是否经过足够的测试、评价测试水准
优化:提高单测的覆盖率。不断对各个分支测试,能保证完备性,提升代码质量
Tips
实际项目覆盖率达不到100%,达到50%-60%:主流程没问题
;到达80%以上:涉及资金等问题
提升覆盖率措施:测试分支相互独立、全面覆盖;测试单元粒度足够小、函数单一职责
依赖
单元测试的两个目标:幂等、稳定
幂等:重复运行一个测试的case时,它的结果相等
稳定:单元测试是相互隔离的,能在任何时间、任何函数运行
单元测试用到Mock机制实现不对本地文件强依赖
Mock
monkey是一个开源的Mock测试包
为函数打桩:用打桩函数替换原函数
通过Unpatch卸载打桩
基准测试
Go还提供基准测试框架
基准测试:测试一段程序运行时的性能和CPU的损耗
项目实践
实现青训营网页
需求
展示话题和回帖列表
暂不考虑前端,仅仅实现一个本地Web服务
需求用例
实体:Topic、PostList
跟着课程视频实现项目,理解开发流程。