03测试
3.1单元测试
输入->测试单元->输出 与期望进行校对
保证质量 提升效率
3.1.1单元测试-规则
所有测试文件以_test结尾
测试函数名字,为TestXxx
初始化逻辑放到TestMain中
3.1.2单元测试-例子
3.1.3单元测试-运行
输入命令 go test -v helloTom_test.go 报错.
输入命令时go test -v可以运行.
PS E:\Users\Dell\GolandProjects\test> go test -v
=== RUN TestHelloTom
--- PASS: TestHelloTom (0.00s)
PASS
ok test 0.384s
3.1.4单元测试-assert
导入assert包,"github.com/stretchr/testify/assert"
3.1.5单元测试-覆盖率
覆盖率=执行代码行数/总行数
3.2单元测试-依赖
外部依赖=>稳定&幂等
3.3单元测试-文件处理
对文件读取遍历,对字符串11进行替换为00
3.4单元测试-mock
mock测试不再依赖于本地文件
3.5基准测试
3.5.1基准测试-例子
随机选择执行服务器
3.5.2基准测试-运行
运行后发现,在并发情况下,代码性能存在一定的劣化。因为select函数用到了rand函数
3.5.3基准测试-优化
使用fastrand
4项目实践
4.1需求描述
社区话题页面
展示话题和回帖列表
暂不考虑前端页面实现,仅仅实现一个本地web服务
话题和回帖数据用文件存储
4.2需求用例
浏览消费用户->话题 ->帖子
4.3er图
4.4分层结构
数据层:数据Model,外部数据的增删改查
逻辑层:业务 Entity,处理核心业务逻辑输出
视图层:视图view,处理和外部的交互逻辑
4.5组件工具
Gin高性能go web框架
Go Mod
4.6repository
Topic
{
"id":1,
"title" :"青训营来啦!"",
"content" :"小姐姐,快到碗里来~",
"create_time" : 1650437625
}
Post
{
"id":1,
"parent_id":1,
"content"":"小姐姐快来1"",
"create_time" :1650437616
}
4.6.1repository-index
元数据 索引
数据行->内存map
4.6.2repository-查询
索引:话题ID 数据:话题 索引:话题ID 数据:帖子列表
4.7service
实体 流程:参数校验->准备数据->组装实现
4.8controller
构建view对象 业务错误码
4.9router
初始化数据索引
初始化引擎配置
构建路由
启动服务
4.10运行
尝试过了,不知道该怎么实现