# 测试策略 ## 1. 测试目标 测试需要证明四件事: 1. 每个目标版本使用正确 Runtime 和 Editor。 2. 预览结果在语义和视觉上正确。 3. 生成 `.spine` 后运行时主体数据没有意外丢失。 4. 断网、损坏输入和批量失败情况下行为安全。 ## 2. 测试层级 ### 2.1 单元测试 不启动 Spine Editor: - 版本字符串解析 - Spine JSON schema 识别 - SKEL 头部有界探测 - Atlas parser - 自动配对评分 - 路径规范化和逃逸防护 - 输出重名策略 - 恢复状态机 - 报告序列化 - Editor 命令参数生成 ### 2.2 组件测试 - 每个 Runtime 插件独立加载相应版本资源。 - Texture Provider 解码 PNG、JPG、WebP。 - 统一 draw list 校验。 - 官方解包结果的尺寸、Alpha 与 golden image 对比。 - Editor Locator 使用模拟注册信息和目录结构。 ### 2.3 Editor 集成测试 需要本地已激活的 Spine Editor: - `--version` 探测 - JSON 导入 - SKEL 导入 - Atlas 官方解包 - 临时工程导出规范化 JSON - 最终 `.spine` 可重新读取 - 取消、超时和错误码映射 ### 2.4 端到端测试 从目录扫描开始,经过预览、确认、解包、导入、验证和发布。检查输入目录完全未改变。 ## 3. 版本矩阵 每个版本至少覆盖: | 版本 | JSON | SKEL | 预览 | 官方解包 | 工程生成 | 语义回读 | |---|---:|---:|---:|---:|---:|---:| | 3.8.20+ | 必测 | 必测 | 必测 | 必测 | 必测 | 必测 | | 4.0.x | 必测 | 必测 | 必测 | 必测 | 必测 | 必测 | | 4.1.x | 必测 | 必测 | 必测 | 必测 | 必测 | 必测 | | 4.2.x | 必测 | 必测 | 必测 | 必测 | 必测 | 必测 | | 4.3.x | 必测 | 必测 | 必测 | 必测 | 必测 | 必测 | ## 4. 功能样本矩阵 - Region - Unweighted/Weighted/Linked Mesh - IK、Transform、Path constraints - Clipping - Deform - Draw order - Events - 多动画、多 Skin - Two Color Tint - Normal/Additive/Multiply/Screen - 单页、多页 Atlas - PMA、Straight Alpha - PNG、JPG/JPEG、WebP - Atlas scale - Polygon packing 不要求一个样本覆盖所有功能,采用可追踪的样本能力清单。 ## 5. 官方测试资源 开发阶段从官方 `EsotericSoftware/spine-runtimes` 仓库各版本分支取得对应样例: ```text 3.8 4.0 4.1 4.2 4.3 ``` 每份资源由 manifest 记录: ```text case id source repository branch commit hash relative paths data version features expected animations/skins/counts license reference sha256 ``` 规则: - 不用 4.3 资源测试旧 Runtime。 - 测试基于固定 commit,不追随浮动分支。 - 官方资源只放在开发测试缓存或 CI 临时空间。 - `tests/fixtures/external/` 不进入发行打包输入。 - 发行产物检查中把官方资源文件名和哈希作为禁止项。 - 未经许可确认,不把官方资源提交到对外发布制品。 ## 6. 自有与生成测试数据 除官方样例外,创建可自由分发的最小数据用于: - 安装后冒烟测试 - 损坏输入测试 - Unicode 路径测试 - 极限尺寸测试 - 输出命名冲突测试 生成数据的来源、生成脚本和许可必须清晰。若生成 `.spine`/导出数据需要 Spine Editor,构建产物仍按许可审查。 ## 7. 视觉回归 在固定 viewport、背景、时间点、Skin 和动画下截图: - 与批准的 golden image 比较。 - 对 JPG/WebP 使用合理像素误差。 - 对 Alpha 边缘增加专门区域检测。 - 单独测试 PMA 黑边、Straight Alpha 白边问题。 - GPU 差异造成的小量误差采用阈值,不使用完全逐字节相等。 ## 8. 语义回归 转换前后生成规范摘要并比较: ```text bones slots skins attachments by type constraints by type animations and duration events deform timelines draw-order timelines ``` Nonessential 数据单独报告,不与运行时语义失败混合。 ## 9. 异常与安全测试 - 截断 SKEL - 超长字符串和伪造数组长度 - 深层/异常 JSON - Atlas 路径逃逸 - 重复 region 和页面 - 缺失或损坏图片 - 巨大图片和解压炸弹式输入 - Editor 路径失效 - Editor 未激活 - 子进程卡住、崩溃、返回非零 - 用户在各阶段取消 - 输出目录无权限或空间不足 ## 10. 离线测试 在 macOS 和 Windows 上分别执行: 1. 准备并验证对应 Editor 版本。 2. 禁用网络接口或在隔离环境阻断网络。 3. 启动 DateToSpine。 4. 完成扫描、预览、官方解包、生成和回读。 5. 记录任何网络连接尝试。 6. 确认不存在 CDN、在线字体、在线 Shader、更新或遥测依赖。 ## 11. 发行物检查 对最终 `.app/.dmg/.exe/installer` 解包检查: - 不含官方测试素材。 - 不含 Spine Editor。 - 包含 Runtime License 和 Third-Party Notices。 - 包含所需 Qt 图片插件,WebP 在断网环境可用。 - 不含开发日志、绝对源码路径、测试缓存或调试密钥。