这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
课上内容摘要:
测试
测试是避免事故的最后一道屏障
- 回归测试 :手动通过终端回归一些固定场景(如手动发评论)
- 集成测试 :从功能维度做验证,比如对服务暴露的某个接口做自动化的集成测试
- 单元测试 :测试开发阶段,开发者对单独的函数、模块做验证。
从上到下,测试覆盖率逐渐变大,成本逐渐降低,单元测试覆盖率一定程度上决定着代码的质量。
单元测试:向测试单元输入并运行,将实际输出与期望的输出做校对。单元测试的覆盖率是以 行 为基本单位进行计算的。
- 一般覆盖率:50%~60%,较高覆盖率80%+;
- 测试分支相互独立、全面覆盖。
- 测试单元粒度足够小,函数单一职责。
通过Mock移除强依赖
单元测试的需要满足两个条件:幂等、稳定(相互隔离)。可以使用Mock来保证。为函数、方法打桩(编写一个函数替换原来的函数的输出,)。比如使用开源的Monkey。他的原理是,在运行时,使用go的unsafe包,在运行时替换了函数的地址。 
go内置的基准测试框架
对热点代码,常常需要测试性能,我们就借助基准测试。
我们编写的函数需要以BenchMark开头
demo实战
需求如下
- 展示话题(标题,文字描述) 和回帖列表
- 暂不考虑前端页面实现,仅仅实现一个本地web服务
- 话题和回帖数据用文件存储
需求分析:
两个实体,Topic话题和Post帖子。 考虑常见的分层设计。
- 数据层:关注底层的数据模型,对外提供统一的CRUD接口,屏蔽下游数据来源的差异,比如本地文件、微服务、外部服务。
- 逻辑层:关心核心的业务逻辑,接受数据层的数据并做一些封装。
- 视图层:对上游负责,包装数据(比如序列化),提供API接口。
课后实践
- 支持发布帖子
- 本地id生成需要保证不重复
- 注意并发安全问题
挖坑:下篇帖子记录用gin+redis+gorm完成本需求。本篇先到此为止吧。