单元测试:输入——测试单元(函数、模块等等)——输出(与期望进行校对)从而能够保证质量、提升效率
规则:所有测试文件以_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:初始化数据索引,初始化引擎配置,构建路由,启动服务
测试运行:端口暴露,通过端口进行测试