一、背景
最新单元测试覆盖率查看地址:https://codecov.io/gh/gogf/gf/tree/master
截止2021-11-16
,框架整体代码量146332
行,其中单元测试代码行数73783
行,单测覆盖率 70.14%
。
代码质量以及可维护性一直是goframe
框架建设非常看重的两点原则,这两点原则也保障了框架组件代码的严谨和稳定。
在框架的维护路程中,单元测试在这其中扮演了非常重要的角色,可以说,框架组件之所以能长期稳定,框架发展到如此大的代码体量能够长期高效维护,离不开单元测试的保驾护航。在此基础之上我们的社区小伙伴才能够释放更多的精力去完善框架的细节,如文档、issue、讨论、布道等活动。
目前70.14%
的单元测试覆盖率在我看来,仅仅保障了框架的核心功能以及大部分的主要功能,这还不够,我们应该可以做得更多。因此,我们组织了这次活动,倡导社区的力量共同来建设完善框架,非常欢迎对此感兴趣的小伙伴来一起参与这个事情。
二、我们的目标
- 提高框架的单侧覆盖率,以进一步保障框架组件质量。
- 所有组件的单侧覆盖率在
90%
以上及格,100%
优秀。
三、单测编写资料
1、介绍资料
2、注意事项
- 我们优先欢迎有一定工作年限和英文阅读能力的小伙伴,以便无偏差理解组件能力,尽可能保障单测质量。
- 每个组件的源代码需要自己去阅读理解,全程没有手把手教学。好在每个组件、方法都有相对详细的英文注释。
- 请务必在理解组件方法的前提下编写单测用例,每个单测应当有断言判断。
- 新的单测只需覆盖没有覆盖到的代码行,不用重复编写已有覆盖率的单测。
- 如果单测中需要写注释,请使用英文,以方便项目后期国际化推广。
四、单测任务划分
类别 | 组件 | 说明 | 难度 | 当前 | 最终 | 贡献者 | 进度 |
---|
数据结构 | gmap |
| 5 | 77.54% | 95.98% | 黄骞 |
|
gtree |
| 6 | 89.14% |
| 黄骞 |
|
gtype |
| 4 | 81.00% |
|
|
|
gvar |
| 10 | 72.97% |
|
|
|
glist |
| 3 | 75.00% |
|
|
|
gpool |
| 4 | 83.70% |
|
|
|
加密解密 | gaes |
| 5 | 86.73% |
|
|
|
gdes |
| 5 | 89.71% |
|
|
|
gmd5 |
| 5 | 38.10% |
| 张育铭 |
|
gsha1 |
| 5 | 60.00% |
|
|
|
数据管理 | gdb |
| 10 | 62.97% |
|
|
|
gredis |
| 5 | 65.08% |
|
|
|
编码解码 | gbinary |
| 7 | 78.66% |
|
|
|
gcompress |
| 5 | 55.27% |
|
|
|
gjson |
| 7 | 89.46% |
| 黄骞 |
|
gbase64 |
| 1 | 53.70% |
| 张育铭 |
|
gcharset |
| 4 | 87.76% |
|
|
|
gini |
| 2 | 81.16% |
|
|
|
gxml |
| 2 | 71.43% |
|
|
|
gyaml |
| 3 | 81.25% |
|
|
|
功能调试 | gdebug |
| 8 | 4.15% |
|
|
|
错误处理 | gcode |
| 2 | 60.00% |
|
|
|
gerror |
| 6 | 71.76% |
|
|
|
耦合便捷 | g | 耦合模块 | 7 | 0.00% |
|
|
|
gins | 单例模块 | 7 | 43.71% |
|
|
|
I18N国际化 | gi18n |
| 9 | 70.28% |
|
|
|
内部组件 | internal/structs | 对象解析组件 | 10 | 57.77% |
|
|
|
internal/utils | 内部工具组件 | 4 | 50.21% |
| 张育铭 |
|
internal/empty | 空值判断组件 | 3 | 60.47% |
| 张育铭 |
|
网络组件 | ghttp | 网络组件,功能强大。单测难度在于内部方法和对象较多。 | 10 | 62.13% |
| |
|
gtcp | TCP通信封装组件。难度在于需要理解和有TCP编程经验便于编写单测。 | 9 | 35.66% | 77.25% | 黄骞 |
|
gclient |
| 8 | 46.87% | 76.19% | 黄骞 |
|
gudp | 同上 | 9 | 37.37% | 61.48% | |
|
gtrace | 难度在于需要模拟和理解OpenTelemetry协议。 | 8 | 17.36% |
|
|
|
系统组件
| gcache |
| 6 | 79.58% |
|
|
|
gcfg |
| 6 | 60.00% |
|
|
|
gcmd |
| 7 | 69.08% |
| |
|
gcron |
| 5 | 41.30% |
|
|
|
gfile |
| 4 | 71.72% |
| |
|
gfpool | 文件指针池。请参考现有用例。 | 4 | 65.26% |
|
|
|
gfsnotify | 底层核心的文件监控组件。 | 10 | 47.99% |
|
|
|
glog | 核心的日志组件。单测难度在于不太方便断言,可参考现有单测示例。 | 10 | 58.22% |
|
|
|
gres | 资源管理。请参考现有用例。 | 8 | 62.21% |
|
|
|
gsession |
| 7 | 70.53% |
| 黄骞 |
|
gtime |
| 5 | 82.86% |
|
|
|
gview | 请参考现有用例。 | 6 | 72.48% |
|
|
|
gbuild | 构建信息管理。单测需要模拟构建信息,参考现有单测用例。 | 3 | 63.33% |
|
|
|
gctx | 上下文管理。 | 2 | 81.25% |
|
|
|
genv |
| 2 | 74.14% |
|
|
|
协议管理 | goai | OpenAPI协议管理组件。单测难度在于需要了解OpenAPI协议才能理解内部的对象设计,才便于编写单测用例。 | 9 | 71.06% |
|
|
|
单元测试 | gtest | 自己测试自己,单测用例还是有一定难度。 | 9 | 11.07% |
|
|
|
文本处理 | gstr | 字符串处理。内部有个别方法不太好理解,先求助下搜索引擎吧。 | 3 | 75.48% |
|
|
|
实用工具
| gconv | 类型转换组件。难度在于内部有几个复杂类型转换方法构造用例比较麻烦:Scan*/Map*/Struct* 方法, | 10 | 59.35% |
|
|
|
grand | 随机数组件。组件由于随机数担忧随机性,所以单测用例不太好设计。 | 6 | 75.17% |
|
|
|
gutil | 工具方法。内部有几个方法也较复杂,可以参考现有单例。 | 7 | 81.44% |
|
|
|
gvalid | 数据校验。 | 6 | 89.16% |
|
|
|
gmeta | 元数据组件。只需要测试写入和读取元数据即可。 | 4 | 80.95% |
|
|
|
gmode | 环境管理。 | 3 | 78.13% |
|
|
|