【免费下载链接】Launcher
This fork of Prism Launcher adds integrated support for Ely.by accounts.
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.cpp | 4 种存档形态(zip/文件夹 × 单存档/多存档) |
Resources/ | ResourceFolderModel_test.cpp | 资源包文件夹 + 假 mod jar |
CatPacks/ | CatPack_test.cpp | 猫咪主题包的日期索引index.json |
Libraries/ | Library_test.cpp | Mojang 版本文档 json + 样例 jar |
MetaComponentParse/ | MetaComponentParse_test.cpp | 5 种元组件 json 变体 |
PackageManifest/ | FileSystem_test.cpp | Technic 清单 + 跨平台目录树 |
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_parseZIP | minecraft_save_1.zip | SINGLE(单存档) |
test_parse_ZIP2 | minecraft_save_2.zip | MULTI(多存档) |
test_parseFolder | minecraft_save_3/ | SINGLE |
test_parseFolder2 | minecraft_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 体系的三个约定:
- 按功能建子目录:新增一个解析器,就在
tests/testdata/下建同名目录存放样例数据 - 准备多种形态:zip 与文件夹、不同版本格式各备一份,确保每条解析路径都有断言
- 期望值文件化:像
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.
相关推荐
Ely Prism Launcher单元测试体系:gtest测试套件运行与解读指南
Ely Prism Launcher单元测试体系:gtest测试套件运行与解读指南 Ely Prism Launcher 是一款集成了 Ely.by 账号 OA
Ely Prism Launcher元数据系统详解:BaseEntity、Index与VersionList如何建模版本数据
Ely Prism Launcher元数据系统详解:BaseEntity、Index与VersionList如何建模版本数据 你是否好奇 Ely Prism L
kubectx源码中的测试数据:testdata目录如何组织测试用例
kubectx源码中的测试数据:testdata目录如何组织测试用例 在软件开发中,测试用例的组织直接影响测试效率和代码质量。kubectx作为一款简化Kube
CLI开发工具云原生
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考