# Oak Video Editor 测试策略与计划 本文档描述 Oak Video Editor 的自动化测试策略,包括单元测试、集成测试以及 CI 执行方式。 ## 目标 - 尽量自动化,减少人工测试。 - 覆盖所有模块(至少一个自动化测试)。 - 集成测试保持无 GUI(头less)。 - 在 Windows/macOS/Linux 上可重复运行。 ## 测试层级 ### 1) 单元测试(GoogleTest) - 目标:小范围、确定性、无 GUI。 - 目录:`tests/gtest/`。 - 执行:`ctest` 里的 `olive-gtest`。 ### 1.5) 模块冒烟测试(GoogleTest) - 目标:对 GUI 相关模块做编译期/链接期覆盖,不实例化控件。 - 目录:`tests/gtest/module_smoke_test.cpp`。 - 执行:`ctest` 里的 `olive-gtest`。 ### 2) 集成测试(GoogleTest) - 目标:跨模块流程但不依赖 GUI(例如序列化→反序列化)。 - 目录:`tests/gtest/`(如 `ProjectSerializer`、`TaskManager`)。 ### 3) 现有测试(Olive 宏测试) - 目录:`tests/general`、`tests/timeline`、`tests/compositing` 保持不变。 ## 模块覆盖映射 每个顶层模块至少有一个测试用例。 - `app/common`:`common_current_test.cpp`、`common_xmlutils_test.cpp` - `app/config`:`config_test.cpp` - `app/node`:`node_value_test.cpp`、`node_keyframe_test.cpp`、`node_serialization_test.cpp` - `app/node/project/serializer`:`project_serializer_test.cpp` - `app/render`:`render_videoparams_test.cpp`、`render_audioparams_test.cpp` - `app/timeline`:`timeline_marker_test.cpp` - `app/undo`:`undo_stack_test.cpp` - `app/task`:`task_taskmanager_test.cpp` - `app/codec`:`codec_frame_test.cpp` - `app/pluginSupport`:`plugin_support_test.cpp` - `app/audio`、`app/cli`、`app/dialog`、`app/panel`、`app/tool`、`app/ui`、`app/widget`、`app/window`:`module_smoke_test.cpp` 若模块包含 GUI 依赖,则测试聚焦于其非可视逻辑/数据结构。 ## 集成测试说明 ### 项目序列化回归 - 创建最小项目并添加内置节点。 - 使用 `ProjectSerializer::Save` 写出 XML。 - 再用 `ProjectSerializer::Load` 读回。 - 验证节点恢复。 ### 任务管理器执行 - 向 `TaskManager` 添加一个 DummyTask。 - 使用事件循环等待完成。 - 验证任务确实执行。 ## 单元覆盖重点(已扩展) - `app/undo`:`undo_stack_test.cpp` 覆盖空栈状态、模型数据、redo 区域颜色、jump 行为、空 MultiUndoCommand 忽略逻辑。 - `app/timeline`:`timeline_marker_test.cpp` 覆盖列表排序、最近 marker 查询、含未知元素的保存/加载、marker 增删改命令。 - `app/pluginSupport`:`plugin_support_image_test.cpp` 覆盖 OFX 属性映射(bounds/ROD、像素深度、通道、预乘)及分配/清理行为。 - `app/render`:`render_videoparams_branch_test.cpp` 覆盖自动 divider、像素宽高比校验、方形像素宽度、Save/Load 回归。 ## 无 GUI 运行 - 测试避免使用 QWidget。 - CI 中设置 `QT_QPA_PLATFORM=offscreen` 防止 GUI 初始化问题。 ## 持续集成 CI 在 Windows/macOS/Linux 上执行: 1. 安装依赖(Qt、FFmpeg、OpenImageIO、OpenColorIO、OpenEXR、PortAudio、Expat)。 2. `-DBUILD_TESTS=ON` 配置。 3. 使用 CMake + Ninja 构建。 4. 运行 `ctest` 输出失败信息。 ### 依赖安装说明 - Linux:优先使用发行版系统包(Ubuntu 上用 `apt`)安装 Qt6、FFmpeg、OpenImageIO、OpenColorIO、OpenEXR、PortAudio、Expat、OpenGL 头文件。 - macOS:使用 Homebrew 安装 Qt6 和图像/色彩/多媒体相关库。 - Windows:尽量使用系统安装器(Qt 通过 `install-qt-action`),其余 C/C++ 库通过 vcpkg 安装。 ## 新增测试规范 - 新测试放在 `tests/gtest`。 - 使用 GoogleTest 规范。 - 尽量保持确定性与无外部依赖。 - 新模块至少增加 1 个单元测试 + 1 个集成场景(可合并)。