- AI 应用
- 大模型
- 本地部署
- 桌面应用
【免费下载链接】ai-file-sorter
Cross-platform desktop application for content-aware file organization and renaming. Supports local and remote LLMs, preview-based workflows, and fully user-controlled changes.
AI File Sorter 是一款支持本地与云端大模型的跨平台 AI 文件整理与重命名桌面应用。为了保障 AI 分类、文件改名、缓存学习等核心功能稳定可靠,项目构建了一套分层测试体系:基于 Catch2 的自动化单元测试、可随生产二进制运行的自测模式,以及面向真实本地大模型的 Live LLM 实战测试。本文将从新手视角带你快速了解这套测试体系如何运作。
1. 测试体系全景:三层防线如何分工
AI File Sorter 的测试分为三层,各负其责,共同覆盖从代码逻辑到真实运行时的全链路:
| 测试层 | 位置 | 速度 | 验证目标 |
|---|---|---|---|
| Catch2 单元/集成测试 | tests/unit/ | 快(秒级~分钟级) | 代码逻辑、UI 行为、边界条件 |
| 生产自测模式 | 可执行文件--self-test | 快 | 真实二进制的确定性检查 |
| Live LLM 实战测试 | tests/live_llm/ | 慢(分钟级) | 真实模型 + 真实文件的黑盒效果 |
官方将测试地图浓缩在 docs/testing.md 中,而 TESTS.md 则是一份逐用例的详细目录:每个测试文件包含什么用例、目的、前置条件、操作步骤和预期结果,堪称"测试文档即代码说明书"的典范。
2. Catch2 单元测试:日常开发的主力
所有单元测试位于 tests/unit/,使用 Catch2 框架,通过 CTest 统一调度。配置时需要开启AI_FILE_SORTER_BUILD_TESTS=ON,之后只需两条命令:
cmake --build build-tests --config Release --target ai_file_sorter_tests --parallel ctest --test-dir build-tests -C Release --output-on-failure只想跑单个用例?直接按名称(支持模式匹配)过滤即可:
./build-tests/ai_file_sorter_tests "用例名称或模式"单元测试覆盖了哪些关键模块?
TESTS.md 按测试文件逐一登记了 50+ 个测试源文件,重点模块包括:
- 无头分析命令(tests/unit/test_headless_analysis_command.cpp):验证 Explorer 集成的
--headless契约,包括运行锁占用时报告blocked状态、空文件夹分类完成时写出completed状态 JSON、UTF-8 文件名在 Review 状态中不损坏等二十余个用例; - 本地 LLM 后端(tests/unit/test_local_llm_backend.cpp):覆盖 CUDA/Vulkan 后端探测、显存不足时安全回退 CPU、GPU 层数重试阶梯(如
20, 15, 11, 8, 6, 4, 3, 2, 1)等 GPU 相关细节; - 提示词构建器(tests/unit/test_local_llm_prompt_builder.cpp):确保文档、图片、目录各自路由到专属系统提示词,且长分析段落重试裁剪后仍保留分类限制与回答格式;
- 复选框路由矩阵(tests/unit/test_checkbox_matrix.cpp):穷举 128 种分析选项组合,验证每个文件都落入预期分桶——这是保证"用户勾什么、程序就做什么"的兜底防线;
- 用户学习库(tests/unit/test_user_learning_store.cpp):验证用户确认的分类映射持久化、向量嵌入更新、清除学习行为时数据库依然可用;
- 缓存维护(tests/unit/test_cache_maintenance_service.cpp):确认清理分类缓存时不会误删用户学习数据。
一个值得新手学习的细节:涉及 GUI 的测试使用 Qt 无头平台插件(Windows 用minimal、其他平台用offscreen),无需显示器也能跑完整的界面逻辑测试。
3. 生产自测模式:--self-test与--test
与许多项目不同,AI File Sorter 的生产二进制本身就内置了测试能力,实现见 app/include/AppTestRunner.hpp:
--self-test:运行确定性的无头检查并以通过/失败退出码结束。当前套件whitelist会在临时配置目录中构建大型合成白名单,验证压缩提示词候选选择、已学分类偏好和 Unicode 白名单标签。可用--self-test=whitelist单独指定套件:
./build-tests/aifilesorter --self-test ./build-tests/aifilesorter --self-test=whitelist--test:启动正常 GUI 并附加 Tests 菜单,自动生成更大的示例白名单与示例文件,然后调用你选择的真实 LLM 走完整分析流程,方便在 Review 对话框中人工审查效果。测试模式产生的白名单、缓存、撤销数据都隔离在test_mode_profile目录中,不会污染真实配置。
这种"生产自测"的价值在于:它测试的是用户真正运行到的那个二进制,能暴露纯单元测试发现不了的环境问题(比如打包、路径、权限)。
4. Live LLM 实战测试:真实模型 + 真实文件
tests/live_llm/headless_live_llm_tests.py 是一套可选的黑盒集成测试,它对真实构建出的aifilesorter --headless命令发起攻击性检验:使用真实的本地文本模型(GGUF),对真实或生成的文件副本进行分类、重命名,然后校验输出的状态/Review JSON 以及文件系统上的实际变化。详见 tests/live_llm/README.md。
为什么它是"可选"的?
这套测试慢、依赖硬件、且模型措辞天然不确定,因此不纳入默认快速循环。它断言的是稳定的生产契约,而非模型的精确输出:
- 状态 JSON 合法、Review 计划成功生成
- 分类结果非空、且严格约束在白名单范围内
- 仅处理选中的文件(同目录多选边界)
- 文件扩展名保持不变
- 多语言重命名(英语/法语/简体中文/印地语)
如何开启并运行
在 CMake 配置时追加-DAI_FILE_SORTER_ENABLE_LIVE_LLM_TESTS=ON,Windows 用户推荐用辅助脚本:
.\app\build_windows.ps1 -Configuration Release -Variants Standard -BuildTests -EnableLiveLlmTests然后指定模型并执行带live-llm标签的测试:
$env:AI_FILE_SORTER_LIVE_LLM_MODEL="C:\models\text-model.gguf" ctest --test-dir build-tests -L live-llm --output-on-failure新手友好的容错设计:如果缺少可执行文件或可用模型,runner 会以退出码77结束,CTest 将其报告为跳过而非失败,不会污染你的日常测试基线。每轮运行还会在工作目录写progress.log,每个用例保留command.txt、stdout.txt、status.json等现场文件,失败时方便复现排查。
5. 什么改动该跑什么测试?
docs/testing.md 给出了实用的"变更 → 测试"映射,值得作为日常开发规范:
- 改了提示词或分类体系→ 先跑提示词构建器与分类相关测试;
- 改了无头模式或 Explorer 集成→ 跑聚焦的
Headless*测试,并同步更新 TESTS.md; - 改了更新器/更新源→ 跑更新器与更新源测试;
- 改了打包/构建脚本→ 除了单元测试,还要在相应平台验证构建路径。
辅助脚本也很齐全:tests/run_all_tests.sh 一键串行执行 tests/run_database_tests.sh(数据库场景)与 tests/run_translation_tests.sh(翻译管线),保证多语言与持久化两条长尾链路不被遗漏。
6. 总结
AI File Sorter 的测试体系体现了"AI 应用测试"的最佳实践:
- 快而确定的 Catch2 单元测试覆盖 99% 的回归场景,且 UI 测试可在无头环境运行;
- 生产自测(
--self-test/--test)让开发者随时用真实二进制做确定性体检; - Live LLM 黑盒测试用稳定不变量(而非精确文案)来约束不确定的模型输出,慢则慢矣,却守住了最后的真实运行时防线。
对于想学习 AI 桌面应用工程实践的新手,这套"分层 + 文档即契约(TESTS.md)+ 稳定不变量断言"的组合,是一份可以直接借鉴的范本。
- AI 应用
- 大模型
- 本地部署
- 桌面应用
【免费下载链接】ai-file-sorter
Cross-platform desktop application for content-aware file organization and renaming. Supports local and remote LLMs, preview-based workflows, and fully user-controlled changes.
相关推荐
Perfetto 测试体系实战指南:单元测试、集成测试、Diff 测试与 CI 全链路
Perfetto 测试体系实战指南:单元测试、集成测试、Diff 测试与 CI 全链路 Perfetto 因构建配置与嵌入目标(独立构建、Android in
可观测性后端开发工具前端数据可视化Spectrum 测试体系完全指南:Jest 单元测试与 Cypress 集成测试实战
Spectrum 测试体系完全指南:Jest 单元测试与 Cypress 集成测试实战 本文围绕 Spectrum 开源社区平台的测试体系展开,系统讲解其基于
后端前端即时通讯社交React Native Windows 测试体系完全指南:单元测试、集成测试与 E2E 测试实战
React Native Windows 测试体系完全指南:单元测试、集成测试与 E2E 测试实战 导读 本文以 docs/testing.md https:/
跨平台前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考