3.8 KiB
3.8 KiB
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.cppapp/config:config_test.cppapp/node:node_value_test.cpp、node_keyframe_test.cpp、node_serialization_test.cppapp/node/project/serializer:project_serializer_test.cppapp/render:render_videoparams_test.cpp、render_audioparams_test.cppapp/timeline:timeline_marker_test.cppapp/undo:undo_stack_test.cppapp/task:task_taskmanager_test.cppapp/codec:codec_frame_test.cppapp/pluginSupport:plugin_support_test.cppapp/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 上执行:
- 安装依赖(Qt、FFmpeg、OpenImageIO、OpenColorIO、OpenEXR、PortAudio、Expat)。
-DBUILD_TESTS=ON配置。- 使用 CMake + Ninja 构建。
- 运行
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 个集成场景(可合并)。