214 lines
7.5 KiB
Markdown
214 lines
7.5 KiB
Markdown
# PinMAP ↔ PinList 双向转换器 测试报告 (v1.5.0)
|
||
|
||
> **版本**: v1.5.0
|
||
> **日期**: 2026-06-06
|
||
> **测试类型**: 单元测试 + 集成测试 + 端到端测试
|
||
> **测试环境**: Python 3.x, Linux x64
|
||
|
||
---
|
||
|
||
## v1.5.0 变更覆盖
|
||
|
||
v1.5.0 引入三项核心变更:
|
||
- **F009**: MAP→List 使用 BallList-Template.xlsx(独立模板)
|
||
- **F010**: List→MAP 使用 BallMAP-Template.xlsx(独立模板)
|
||
- **F011**: 模板格式提取式应用(字体/边框/填充/对齐/列宽/行高)
|
||
- **F012**: PinName 位置确认(bottom=max_row-1, top=min_row+1)
|
||
|
||
## 测试覆盖矩阵
|
||
|
||
| 特性 | 单元测试 | 集成测试 | 状态 |
|
||
|------|---------|---------|------|
|
||
| F009 — BallList 模板加载 | ✅ `test_template_path_generation` | ✅ TC-v1.5-001/002/005 | ✅ |
|
||
| F010 — BallMAP 模板加载 | ✅ `test_template_path_generation` | ✅ TC-v1.5-003/004/005 | ✅ |
|
||
| F011 — 模板字体应用 | ✅ `test_f011_template_fonts_in_styles_xml` | ✅ TC-v1.5-007/010/013 | ✅ |
|
||
| F011 — 模板边框应用 | ✅ `test_f011_template_borders_in_styles_xml` | ✅ TC-v1.5-007/010 | ✅ |
|
||
| F011 — 模板填充应用 | ✅ `test_f011_template_fills_in_styles_xml` | ✅ TC-v1.5-010 | ✅ |
|
||
| F011 — 默认样式降级 | ✅ `test_f011_default_styles_xml` | ✅ TC-v1.5-002/004/012 | ✅ |
|
||
| F011 — 输出 dim 由 Pin 决定 | ✅ `test_f011_output_dims_determined_by_pins` | ✅ TC-v1.5-014 | ✅ |
|
||
| F011 — 列宽应用 | — | ✅ TC-v1.5-008/014 | ✅ |
|
||
| F011 — 行高应用 | — | ✅ TC-v1.5-009 | ✅ |
|
||
| F012 — PinName 位置 | ✅ `test_f012_pinname_position` | — | ✅ |
|
||
| 损坏模板优雅降级 | — | ✅ TC-v1.5-006 | ✅ |
|
||
| 极简模板 | — | ✅ TC-v1.5-013 | ✅ |
|
||
| 无模板完整流程 | — | ✅ TC-v1.5-012 | ✅ |
|
||
| 完整往返+模板隔离 | — | ✅ TC-v1.5-011 | ✅ |
|
||
| 空 fonts/样式回退 | ✅ `test_template_empty_fonts_fallback` | — | ✅ |
|
||
| FF 颜色前缀补全 | ✅ `test_template_color_prefix_auto_fix` | — | ✅ |
|
||
| 缺失 styles.xml 降级 | ✅ `test_template_no_styles_xml` | — | ✅ |
|
||
|
||
## 测试概览
|
||
|
||
| 类别 | 用例数 | 通过 | 失败 |
|
||
|------|--------|------|------|
|
||
| 单元测试 (test_pinmap.py) | **18** | **18** | **0** |
|
||
| MAP->List 回归 | 6 | 6 | 0 |
|
||
| List->MAP 新增 | 17 | 17 | 0 |
|
||
| v1.5 模板/样式集成 | 14 | 14 | 0 |
|
||
| **总计** | **55** | **55** | **0** |
|
||
|
||
---
|
||
|
||
## Part 1: MAP→List 回归测试
|
||
|
||
### TC-MAP-001: 标准4x4 PinMAP转换
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 封装=QFP12, Pin数=12, 序号递增
|
||
|
||
### TC-MAP-002: 长方形PinMAP转换
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 封装=LQFP100, Pin数=11, 序号递增
|
||
|
||
### TC-MAP-003: 序号不连续检测
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 错误: Pin序号不连续 — 缺失的序号: [3]
|
||
|
||
### TC-MAP-004: 序号重复检测
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 错误: Pin序号重复 — 重复的序号: [2]
|
||
|
||
### TC-MAP-005: PinName缺失警告
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 警告: 检测到 3 个引脚缺少 PinName — 缺失引脚序号: [2, 3, 4],将默认为 NC
|
||
|
||
### TC-MAP-006: A1为空检测
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: A1 单元格为空,缺少封装信息
|
||
|
||
## Part 2: List→MAP 新增功能测试
|
||
|
||
### TC-LM-001: 5×5 PinList→PinMAP (20引脚)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 解析成功, 封装=QFP-20, Pin数=20, 5×5布局验证通过
|
||
|
||
### TC-LM-002: 6×10 PinList→PinMAP (32引脚)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 解析成功, 封装=LQFP-32, Pin数=32, 6×10布局+文件输出验证通过
|
||
|
||
### TC-LM-003: 带模板文件的转换
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 模板样式读取成功, 带模板输出文件包含styles.xml
|
||
|
||
### TC-LM-004: Pin序号不连续
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: Pin序号不连续 — 缺失的序号: [3]
|
||
|
||
### TC-LM-005: Pin序号重复
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: Pin序号不连续 — 缺失的序号: [4]
|
||
|
||
### TC-LM-006: Pin总数不匹配
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: Pin数量与网格周长不匹配 — 网格 3×4 需要 14 个引脚,但 PinList 有 8 个
|
||
|
||
### TC-LM-007: 缺少PinName (warning)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 验证通过(有warning): 检测到 1 个引脚缺少 PinName — 缺失引脚序号: [2],将默认为 NC
|
||
|
||
### TC-LM-008: 非4倍数提示
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 验证通过, Pin数=14 (非4倍数)
|
||
|
||
### TC-LM-009: 布局计算正确性
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 布局计算正确: left=3, bottom=3, right=3, top=3, 逆时针顺序正确
|
||
|
||
### TC-LM-010: 模板文件检测(无模板)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 无模板文件时优雅返回None
|
||
|
||
### TC-LM-011: 无效尺寸输入(行数<2)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: 行数无效: 1,至少需要 2 行
|
||
|
||
### TC-LM-011b: 无效尺寸输入(列数<2)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: 列数无效: 1,至少需要 2 列
|
||
|
||
### TC-LM-012: 输出文件正确性
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 输出文件验证通过: A1=QFP-12, 包含Pin1-Pin12
|
||
|
||
### TC-LM-013: 端到端Roundtrip (MAP→List→MAP)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: Roundtrip成功: PinList(12) → PinMAP(3×3) → PinList(12), 序号一致
|
||
|
||
### TC-LM-014: 输出路径生成
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 路径生成正确: /path/to/my_pinlist_PinMAP.xlsx
|
||
|
||
### TC-LM-015: 空PinList文件
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: 未找到任何引脚数据(A/B 列为空)
|
||
|
||
### TC-LM-016: A1为空的PinList
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 正确报错: A1 单元格为空,无法获取封装信息
|
||
|
||
## Part 3: v1.5 模板/样式集成测试
|
||
|
||
### TC-v1.5-001: MAP->List 加载 BallList 模板
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 模板加载成功: fonts=2, borders=2, width_A=25.0
|
||
|
||
### TC-v1.5-002: MAP->List 无模板降级
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 无模板文件时优雅返回 None
|
||
|
||
### TC-v1.5-003: List->MAP 加载 BallMAP 模板
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 模板加载成功: fonts=2, borders=2, row_height=25.0
|
||
|
||
### TC-v1.5-004: List->MAP 无模板降级
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 无模板文件时优雅返回 None
|
||
|
||
### TC-v1.5-005: 两个方向独立使用各自模板
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 两个模板独立: BL fonts=2, BM fonts=2
|
||
|
||
### TC-v1.5-006: 模板损坏优雅降级
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 损坏模板优雅返回 None
|
||
|
||
### TC-v1.5-007: 模板字体应用到输出文件
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 输出 styles.xml 包含模板字体(宋体 14pt)
|
||
|
||
### TC-v1.5-008: 模板列宽应用到输出文件
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 列宽验证通过: A=25.0, B=18.0
|
||
|
||
### TC-v1.5-009: 模板行高应用到输出文件
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 行高验证通过: ht=25
|
||
|
||
### TC-v1.5-010: 两个方向不同模板各自的格式
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 两个方向输出字体不同: BL->楷体, BM->宋体
|
||
|
||
### TC-v1.5-011: 完整往返+模板隔离
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 往返成功: 12 pins, 楷体->PinList, 宋体->PinMAP
|
||
|
||
### TC-v1.5-012: 无模板完整流程
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 无模板完整流程正常
|
||
|
||
### TC-v1.5-013: 极简模板(只有字体)
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 极简模板: font=Courier New
|
||
|
||
### TC-v1.5-014: 列宽扩展
|
||
- **结果**: ✅ 通过
|
||
- **详情**: 列宽扩展正确: A=15.0, B=12.0, C=10.0, D=8.0, E=8.0
|
||
|
||
---
|
||
|
||
## 结论
|
||
|
||
✅ **所有测试用例通过,项目可进入发布阶段。**
|
||
|
||
---
|
||
|
||
*测试完成* |