添加测试

This commit is contained in:
2026-01-05 02:55:12 +08:00
parent 0323c74c83
commit 9d0790370f
+86
View File
@@ -0,0 +1,86 @@
# Olive 测试策略与计划
本文档描述 Olive 的自动化测试策略,包括单元测试、集成测试以及 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。
- 使用事件循环等待完成。
- 验证任务确实执行。
## 无 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 个集成场景(可合并)。