Go 语言工程实践之测试 | 青训营

66 阅读2分钟

03测试

3.1单元测试

输入->测试单元->输出 与期望进行校对

保证质量 提升效率

3.1.1单元测试-规则

所有测试文件以_test结尾

测试函数名字,为TestXxx

初始化逻辑放到TestMain中

3.1.2单元测试-例子

image.png

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图

image.png

4.4分层结构

数据层:数据Model,外部数据的增删改查

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

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

image.png

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运行

尝试过了,不知道该怎么实现