第四次笔记|青训营

83 阅读2分钟

单元测试:输入——测试单元(函数、模块等等)——输出(与期望进行校对)从而能够保证质量、提升效率

                     规则:所有测试文件以_test.go结尾(便于区分)

                            Func Testmmm(函数命名规则)

                            初始化逻辑放到testmain中

                     出现问题——定位错误 执行assert

                     覆盖率:衡量代码经过足够的测试、评价项目的测试水准、项目达到的高水准测试等级

                     一般的覆盖率:50%~60% 较高80+

                     测试分支相互独立、全面覆盖

                     测试单元粒度足够小,函数单一职责

              依赖:外部依赖——稳定(函数能够独立运行)、幂等(重复运行,结果不变)

文件处理:——mock(快速mock函数:为一个函数/方法打桩):利用patch与unpatch,运行时调用打桩函数

基准测试:优化代码,对当前代码进行分析;内置的测试框架提供了基准测试的能力

例:随机选择执行服务器 整体规则与单元测试相同,函数以benchmark开头

对测试进行优化

小结:单元——mock——基准

 

一、项目实战:通过项目需求、需求拆解、逻辑设计、代码实现讲解整个过程

需求背景:开发一个社区话题页面:展示话题(标题,文字描述)和回帖列表

                                                        话题和回帖数据用文件存储

                                                        暂不考虑前端页面实现,仅实现一个本地web服务

用户分析:浏览消费用户——topic postlist——定义对应的结构体,创建er图来分析结构

分层结构:数据层:数据model,外部数据的增删改查

              逻辑层:业务enitity,处理核心业务逻辑输出

              视图层:视图view,处理和外部的交互逻辑

具体结构还需考虑实际情况是否降低或者增加复杂度

组件工具gin高性能go web框架

               Go mod

数据层:实现post与topic的相互查询,如何提高查询效率?

              利用内存的索引(map映射) 初始化话题数据索引——实现查询操作

服务层:流程:参数校验——准备数据——组装实体

将话题信息与回帖信息并行处理(由于两个流程互不相干)

考虑到项目的可用性

Controller:构建view对象,处理业务错误码  类型转换

Router:初始化数据索引,初始化引擎配置,构建路由,启动服务

测试运行:端口暴露,通过端口进行测试