Skip to content

Phase 8: 测试体系 -- 设计意图

为什么选择这种方案

CFDesktop 的测试策略遵循经典测试金字塔:70% 单元测试 + 20% 集成测试 + 10% UI 测试。选择 GoogleTest 作为主框架(项目已在 CLAUDE.md 中明确),配合 Qt6::Test 处理信号/控件相关的测试。这个组合既能测纯逻辑(CPU 检测、主题引擎、动画管理),也能测 Qt 信号槽和 Widget 行为。

测试目录按 test/<module>/<component>/<component>_test.cpp 组织,与源码结构镜像,便于定位。硬件相关测试通过 Mock 系统注入伪造的 /proc/cpuinfo、/proc/meminfo 等文件,避免测试依赖真实硬件。CI 使用 GitHub Actions,单元测试和集成测试在容器中运行,UI 测试通过 Xvfb 虚拟显示执行,性能测试单独 job 跑 Release 构建。

关键决策

决策理由被否决的替代方案
GoogleTest + Qt6::Test 双框架GoogleTest 适合纯逻辑单元测试,Qt::Test 提供 QSignalSpy 等 Qt 专项支持纯 GoogleTest(Qt 信号测试麻烦)或纯 QtTest(缺少参数化等高级特性)
Mock 文件注入(伪造 /proc、/sys)硬件探测逻辑依赖内核文件系统,Mock 让测试在任何机器上可复现每次测试都要求特定硬件环境
测试金字塔 70/20/10单元测试快速稳定覆盖大部分逻辑,集成/UI 测试聚焦关键路径均衡分配或只做单元测试
CI 分阶段 (unit -> integration -> UI -> performance)单元测试快速失败尽早反馈,UI/性能测试依赖前序通过再执行所有测试一次性全跑

当前状态

部分实现(约 55%)。base 层核心模块已有单元测试覆盖,CI 已配置 GitHub Actions。参见 status/current.md Phase 8 部分。

Built with VitePress