Extra2D/tests/README.md

140 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Extra2D 测试套件
## 概述
本测试套件包含对 Extra2D 引擎核心模块的单元测试和集成测试。
## 测试框架
使用自定义轻量级测试框架,位于 `test_framework.h`
### 特性
- 自动测试注册和发现
- 支持测试套件组织
- 丰富的断言宏
- 详细的测试报告
## 测试文件说明
| 文件 | 描述 | 测试数量 |
|------|------|----------|
| `test_timer_module.cpp` | 定时器模块测试 | 20+ |
| `test_event_bus.cpp` | 事件总线测试 | 20+ |
| `test_module_registry.cpp` | 模块注册表测试 | 12+ |
| `test_plugin_loader.cpp` | 插件加载器测试 | 15+ |
| `test_context.cpp` | Context 集成测试 | 15+ |
## 构建和运行
### 构建测试
```bash
# 配置并构建测试
xmake f --tests=y
xmake
# 或者显式指定平台
xmake f -p mingw --tests=y
xmake
```
### 运行测试
```bash
# 运行所有测试
xmake run extra2d_tests
# 或者在构建目录中直接运行
./build/mingw/x86_64/debug/extra2d_tests.exe
```
## 测试覆盖范围
### TimerModule 测试
- 基础属性和生命周期
- 一次性定时器scheduleOnce
- 重复定时器scheduleRepeat
- 每帧更新定时器scheduleUpdate
- 暂停和恢复功能
- 时间缩放效果
- 多定时器管理
- 边界条件处理
### EventBus 测试
- 基础事件广播
- 多监听器支持
- 监听器启用/禁用
- 带参数事件
- 不同事件类型
- 监听器生命周期RAII
- 输入事件(键盘、鼠标、触摸)
- 窗口事件
- 游戏手柄事件
- 性能测试
### ModuleRegistry 测试
- 基础注册/注销操作
- 重复注册处理
- 按类型获取模块
- 初始化和关闭顺序
- 优先级排序
- 空注册表处理
### PluginLoader 测试
- 基础注册/卸载操作
- 插件加载和卸载
- 依赖关系解析
- 加载顺序验证
- 缺失依赖处理
- 循环依赖处理
- 复杂依赖图
### Context 集成测试
- 创建和销毁
- 初始化和关闭
- 时间推进
- 停止请求
- 组件访问(模块、插件、定时器)
- 事件广播
- 多 Context 支持
- 定时器集成
- 完整生命周期
- 性能测试
## 添加新测试
使用 `TEST` 宏添加新测试:
```cpp
#include "test_framework.h"
#include <your_module.h>
using namespace extra2d;
using namespace extra2d::test;
TEST(SuiteName, TestName) {
// 测试代码
ASSERT_EQ(expected, actual);
ASSERT_TRUE(condition);
ASSERT_NOT_NULL(ptr);
}
```
## 断言宏
- `ASSERT_TRUE(expr)` - 断言表达式为 true
- `ASSERT_FALSE(expr)` - 断言表达式为 false
- `ASSERT_EQ(expected, actual)` - 断言相等
- `ASSERT_NE(expected, actual)` - 断言不相等
- `ASSERT_NULL(ptr)` - 断言指针为 null
- `ASSERT_NOT_NULL(ptr)` - 断言指针不为 null
- `ASSERT_THROW(expr, ExceptionType)` - 断言抛出异常
- `ASSERT_NO_THROW(expr)` - 断言不抛出异常
## 注意事项
1. 测试使用静态注册,自动发现并运行
2. 每个测试用例独立运行,互不影响
3. 测试框架会捕获异常并报告错误
4. 支持测试跳过skip功能