重构代码的架构设计,增加测试单元,提高代码可靠性

This commit is contained in:
2026-03-23 20:40:04 +08:00
parent c2ce221691
commit a4bf0962b2
31 changed files with 2084 additions and 703 deletions

View File

@@ -55,8 +55,12 @@ DTU-HMI/
│ └── Drv/
│ ├── menu.c/h
│ ├── display.c/h
│ ├── lcd.c/h
├── Ascii.c/h
│ ├── lcd/
│ ├── lcd.c/h
│ │ ├── lcd_draw.c/h
│ │ ├── lcd_text.c/h
│ │ ├── text_codec.c/h
│ │ └── ascii.c/h
│ └── utf8_hz12_data.c/h # 由脚本生成
└── build/
```
@@ -657,8 +661,11 @@ void Menu_Route(void)
具体使用方式可以参考:
- `src/Drv/Ascii.c`ASCII/字母数字字符绘制
- `src/Drv/lcd.c`LCD 基础绘制接口
- `src/Drv/lcd/ascii.c`ASCII/字母数字字符绘制
- `src/Drv/lcd/lcd.c`LCD 核心上下文与像素接口
- `src/Drv/lcd/lcd_draw.c`:图元绘制接口
- `src/Drv/lcd/lcd_text.c`:文本渲染接口
- `src/Drv/lcd/text_codec.c`UTF-8 解码接口
---
@@ -677,3 +684,45 @@ void Menu_Route(void)
- 在关键流程(如 `Menu_Route`、`Menu_Show_Proc`、`remoteDisplay` 收发函数)增加 `#ifdef DEBUG` 包裹的日志
- 使用 GDB / VS 调试器在 `main.c`/`menu.c` 等处打断点,单步查看菜单树和坐标计算过程
---
## 11. 单元测试与门禁
### 11.1 运行单元测试
```powershell
# 1. 配置:生成构建文件(如 Makefile到 build 目录
cmake -S . -B build
# 2. 编译:真正编译代码
cmake --build build
# 3. 进行测试
# ctest 用 CTest 测试运行器CMake 自带)
# --test-dir build 指定测试目录是 build。
# -C Debug 指定运行 Debug 配置下编译出的测试程序。
# --output-on-failure 只有测试失败时,才输出该测试的 stdout/stderr 详细信息
ctest --test-dir build -C Debug --output-on-failure
```
当前已落地测试集合:
- `test_smoke`:测试框架烟雾验证
- `test_p0_remote_display``calc_crc`、`parse_frame` 协议解析核心
- `test_p0_utf8_next`UTF-8 解码边界场景
- `test_p0_utf8_hz12_get`:汉字字库二分查找命中/未命中
- `test_p1_key`:按键状态消费语义
- `test_p1_lcd_basic`:像素读写、填充、反显
- `test_p1_menu`:菜单长度计算、层级初始化
- `test_p2_tcp_loopback`TCP 本机回环收发(集成)
### 11.2 质量门禁(建议)
- 提交前最低门禁:`ctest --test-dir build -C Debug --output-on-failure` 必须全绿。
- 新增或修改纯逻辑函数时,必须同时补充对应单元测试。
- 修复缺陷时,必须附带回归测试用例,避免问题再次出现。
### 11.3 覆盖率目标(阶段性)
- P0 核心模块(协议解析/字符解析)行覆盖率建议 >= 70%。
- P0 核心模块分支覆盖率建议 >= 60%。
- P1/P2 模块可按迭代逐步提升,不要求一次到位。