news 2026/10/18 1:35:03

Ely Prism Launcher测试数据体系:testdata目录如何支撑20+个gtest单元测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ely Prism Launcher测试数据体系:testdata目录如何支撑20+个gtest单元测试

【免费下载链接】Launcher

This fork of Prism Launcher adds integrated support for Ely.by accounts.

项目地址:https://gitcode.com/GitHub_Trending/ely/Launcher
点击查看免费下载

Ely Prism Launcher 是一个基于 Prism Launcher 的 Minecraft 启动器分支,在原版基础上集成了 Ely.by 账户支持。它的代码质量很大程度上由 tests/ 目录下 21 个 QtTest 单元测试文件保障,而这些测试能够稳定运行的核心,就是 tests/testdata/ 中精心组织的 13 类测试数据目录。下面带你快速看懂这套测试数据体系的设计思路。

一、测试体系全景:21 个测试用例的注册方式

所有测试统一在 tests/CMakeLists.txt 中通过ecm_add_test注册,每个测试都链接Launcher_logic核心逻辑库和Qt::Test框架:

  • 解析类测试:DataPackParse、ResourcePackParse、TexturePackParse、ShaderPackParse、WorldSaveParse、MetaComponentParse、MojangVersionFormat、Packwiz
  • 基础能力测试:FileSystem、GZip、GradleSpecifier、INIFile、Index、JavaVersion、Version、ParseUtils、Task
  • 业务类测试:Library(19 处引用 testdata)、CatPack、XmlLogs、ResourceFolderModel

主入口 CMakeLists.txt 中通过if(BUILD_TESTING)开关控制整个测试目录是否参与构建,测试与产品代码完全解耦。

二、testdata 目录结构一览

tests/testdata/下按“被测功能”划分为 13 个子目录,形成清晰的映射关系:

子目录对应测试数据内容
DataPackParse/DataPackParse_test.cpp数据包的 zip 包 + 两个文件夹形态
TexturePackParse/TexturePackParse_test.cpp纹理包 zip 与文件夹
ShaderPackParse/ShaderPackParse_test.cpp着色器包 zip 与 properties 文件
WorldSaveParse/WorldSaveParse_test.cpp4 种存档形态(zip/文件夹 × 单存档/多存档)
Resources/ResourceFolderModel_test.cpp资源包文件夹 + 假 mod jar
CatPacks/CatPack_test.cpp猫咪主题包的日期索引index.json
Libraries/Library_test.cppMojang 版本文档 json + 样例 jar
MetaComponentParse/MetaComponentParse_test.cpp5 种元组件 json 变体
PackageManifest/FileSystem_test.cppTechnic 清单 + 跨平台目录树
Packwiz/Packwiz_test.cpp真实世界的.pw.toml清单
TestLogs/XmlLogs_test.cpp原版 1.21.5 与模组服的日志样本
Version/Version_test.cpp版本号测试向量test_vectors.txt
FileSystem/FileSystem_test.cpp模拟实例的 assets 目录树

💡 一个设计亮点:同一类对象会刻意准备zip 压缩包和展开文件夹两种形态(如WorldSaveParse/下的minecraft_save_1.zip与minecraft_save_3/),确保两种解析路径都被覆盖。

三、典型用例剖析:测试如何消费 testdata

1. 定位数据:QFINDTESTDATA 宏

测试代码不硬编码绝对路径,而是用 Qt 的QFINDTESTDATA宏定位数据目录,再配合 launcher/FileSystem.h 的FS::PathCombine拼接文件。以数据包头解析为例,见 tests/DataPackParse_test.cpp:

  • QFINDTESTDATA("testdata/DataPackParse")找到数据根目录
  • FS::PathCombine(source, "test_data_pack_boogaloo.zip")拼出 zip 路径
  • DataPackUtils::processZIP(&pack)解析后断言packFormat() == 4

同一文件内还有test_parseFolder和test_parseFolder2两个槽位函数,分别验证文件夹形态的两种数据包头,形成zip + folder + 自动识别的完整覆盖。

2. 多形态存档解析:WorldSaveParse

tests/WorldSaveParse_test.cpp 是"形态矩阵"测试的典范:

槽位函数输入数据预期格式
test_parseZIPminecraft_save_1.zipSINGLE(单存档)
test_parse_ZIP2minecraft_save_2.zipMULTI(多存档)
test_parseFolderminecraft_save_3/SINGLE
test_parseFolder2minecraft_save_4/MULTI

四种组合正好覆盖WorldSaveUtils::processZIP/processFolder/process三条解析入口,任何一条回归 bug 都会立刻被捕获。

3. 日期映射业务测试:CatPack

tests/CatPack_test.cpp 基于 tests/testdata/CatPacks/index.json 验证猫咪主题的日期映射逻辑:4 月 12 日返回oneDay.png、12 月 25–28 日返回christmas.png、跨年边界(12 月 29 日 ~ 1 月 3 日)返回新年图片。这类"边界日期 + 固定索引"的测试数据,是验证周期映射算法最有效的形式。

4. 真实日志样本:XmlLogs

tests/XmlLogs_test.cpp 使用 tests/testdata/TestLogs/ 下的真实日志(如vanilla-1.21.5-levels.txt、TerraFirmaGreg-Modern-xml-levels.txt)逐行比对日志级别解析结果,-levels.txt文件充当"期望值清单",让 XML 日志解析器的正确性可以精确到每一行。

四、新手指南:如何运行这些测试

仓库是只读的,建议在本地 clone 后编译:

# 1. 克隆仓库 git clone https://gitcode.com/GitHub_Trending/ely/Launcher # 2. 开启测试开关并配置(参考 CMakePresets.json 的预设) cmake -B build -DBUILD_TESTING=ON # 3. 构建并运行测试 cmake --build build ctest --test-dir build

关键点:主 CMakeLists.txt 只有在BUILD_TESTING为 ON 时才会执行add_subdirectory(tests),因此日常构建不会引入测试开销。

五、对贡献者的启示

如果你要为 Ely Prism Launcher 提交新功能,可以参考这套 testdata 体系的三个约定:

  1. 按功能建子目录:新增一个解析器,就在tests/testdata/下建同名目录存放样例数据
  2. 准备多种形态:zip 与文件夹、不同版本格式各备一份,确保每条解析路径都有断言
  3. 期望值文件化:像Version/test_vectors.txt和TestLogs/*-levels.txt那样,把预期输出写成纯文本文件,便于人工核对与评审

总结

Ely Prism Launcher 的测试体系用 21 个 QtTest 用例 + 13 类 testdata 数据目录,把 Minecraft 启动器中最易出错的"文件解析层"——数据包、资源包、存档、日志、组件清单——全部纳入了自动化验证。理解 tests/testdata/ 的组织方式,你不仅能读懂它的代码质量保障机制,也能在贡献时快速写出合格的测试数据。

【免费下载链接】Launcher

This fork of Prism Launcher adds integrated support for Ely.by accounts.

项目地址:https://gitcode.com/GitHub_Trending/ely/Launcher
点击查看免费下载
上一篇:Geeker-Admin:终极Vue3后台框架快速搭建完全指南
下一篇:打造专属浏览器主页:一个极简实用的自定义起始页方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 1:34:07

OSINT开源情报实战:从公开信息到商业尽职调查全流程指南

简介:《OSINT权威指南:尽职调查实务》是一本由Cynthia Hetherington撰写的开源情报实务指南,面向商业调查、风控合规、情报分析等从业者,也适合刚接触开源情报的新手系统入门。书中从尽职调查基础理论出发,深入讲解不同…

作者头像 李华
网站建设 2026/10/18 1:33:30

NetFlow与sFlow混合流量采集系统实战指南

简介:本资源是一份面向IT运维工程师与网络分析初学者的实战型技术文档,聚焦数据流量采集系统的设计原理与工程落地,解决网络性能监控、异常流量识别及可视化分析等核心问题。文档系统梳理了SNMP、NetFlow/sFlow、数据包捕获等主流采集方法的适…

作者头像 李华
网站建设 2026/10/18 1:32:53

51单片机超声波避障小车Proteus仿真原理与实现

简介:PDF文档围绕基于51单片机的超声波避障小车设计展开,重点补齐完整Proteus仿真环节,解决同类资料中仿真工程难找、不易复现的痛点,面向正在学习单片机、传感器与电机驱动,或需要参照完整仿真工程的开发者。文档以AT…

作者头像 李华
网站建设 2026/10/18 1:32:20

LivePortrait精简版:开箱即用的人像动画生成工具

说实话,这个标题是我自己折腾了近一个月之后,决定分享出来的真实原因。身边好几个朋友都问过我同一个问题:看网上那些“让照片开口说话、转头眨眼”的视频很心动,自己也想去跑一下开源的人像动画项目,结果不是卡在环境…

作者头像 李华
网站建设 2026/10/18 1:31:59

变频器EMC测试与整改实战:传导辐射抗扰度全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/18 1:30:39

Folia 下载与安装:十分钟把全屏歌词动画播放器装好

Folia 下载与安装:十分钟把全屏歌词动画播放器装好 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款全屏沉浸式歌词动画…

作者头像 李华