Extra2D/tests
ChestnutYueyue 418d2c8f92 feat(tests): 添加完整的测试套件框架和核心模块测试
refactor(module): 改进模块注册表同名模块处理逻辑
refactor(plugin): 优化插件加载器依赖检查机制
refactor(event): 重构事件总线监听器添加顺序逻辑

build: 添加测试构建选项和配置
docs: 添加测试套件README文档
2026-02-28 21:48:35 +08:00
..
README.md feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
main.cpp feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
test_context.cpp feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
test_event_bus.cpp feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
test_module_registry.cpp feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
test_plugin_loader.cpp feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
test_timer_module.cpp feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00
xmake.lua feat(tests): 添加完整的测试套件框架和核心模块测试 2026-02-28 21:48:35 +08:00

README.md

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+

构建和运行

构建测试

# 配置并构建测试
xmake f --tests=y
xmake

# 或者显式指定平台
xmake f -p mingw --tests=y
xmake

运行测试

# 运行所有测试
xmake run extra2d_tests

# 或者在构建目录中直接运行
./build/mingw/x86_64/debug/extra2d_tests.exe

测试覆盖范围

TimerModule 测试

  • 基础属性和生命周期
  • 一次性定时器scheduleOnce
  • 重复定时器scheduleRepeat
  • 每帧更新定时器scheduleUpdate
  • 暂停和恢复功能
  • 时间缩放效果
  • 多定时器管理
  • 边界条件处理

EventBus 测试

  • 基础事件广播
  • 多监听器支持
  • 监听器启用/禁用
  • 带参数事件
  • 不同事件类型
  • 监听器生命周期RAII
  • 输入事件(键盘、鼠标、触摸)
  • 窗口事件
  • 游戏手柄事件
  • 性能测试

ModuleRegistry 测试

  • 基础注册/注销操作
  • 重复注册处理
  • 按类型获取模块
  • 初始化和关闭顺序
  • 优先级排序
  • 空注册表处理

PluginLoader 测试

  • 基础注册/卸载操作
  • 插件加载和卸载
  • 依赖关系解析
  • 加载顺序验证
  • 缺失依赖处理
  • 循环依赖处理
  • 复杂依赖图

Context 集成测试

  • 创建和销毁
  • 初始化和关闭
  • 时间推进
  • 停止请求
  • 组件访问(模块、插件、定时器)
  • 事件广播
  • 多 Context 支持
  • 定时器集成
  • 完整生命周期
  • 性能测试

添加新测试

使用 TEST 宏添加新测试:

#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功能