SuperAPI AI 工具集

test-helpers

测试与质量

查看项目

更新于 10-15 14:26

技能介绍

用途

test-helpers 用于在游戏项目中生成引擎专属的测试辅助库。当常见的前置准备、清理和断言模式被抽象成辅助函数后,编写测试用例会更快、更一致。该技能会根据项目实际使用的引擎、语言和系统,生成 tests/helpers/ 辅助库,让开发者少写样板代码、多写断言。

主要能力

  • 生成引擎专属的辅助文件,输出到该引擎测试运行器能够编译的辅助根目录:
    • Godot:tests/helpers/
    • Unity:Assets/Tests/EditMode/Helpers/(位于 /test-setup 创建的 EditModeTests 程序集内)。如果 PlayMode 测试需要相同辅助,需先询问再创建 Assets/Tests/Helpers/TestHelpers.asmdef 并在两个测试程序集中引用。
    • Unreal:Source/<Module>/Private/Tests/Helpers/
  • 生成基础辅助库,包括断言工具(如 game_assertions)和工厂函数(如 game_factory)。
  • 按系统生成专属辅助,例如为 combat 系统生成 CombatTestFactory,包含该系统的工厂函数和断言辅助。
  • 支持三种运行模式:
    • /test-helpers [system-name]:为特定系统生成辅助
    • /test-helpers all:为所有已有测试文件的系统生成辅助
    • /test-helpers scaffold:仅生成基础辅助库(首次运行时使用)
    • 无参数:若无辅助则运行 scaffold,否则运行 all

使用方式

  1. 解析参数,确定模式。
  2. 检测引擎和语言:优先读取 project.yaml,缺失或为空时回退到 .claude/docs/technical-preferences.md,读取 engine.name、engine.language、testing.framework。若两处都未配置引擎,则提示先运行 /setup-engine。
  3. 加载现有测试模式:扫描引擎测试根目录中已使用的模式(Godot 的 tests//_test.、Unity 的 Assets/Tests//Tests.cs、Unreal 的 Source//Private/Tests/**/*.cpp),最多读取 5 个代表性文件,提取 setup 模式、常见断言模式、对象创建模式、mock/stub 模式,确保生成的辅助与项目现有风格一致。同时读取 design/gdd/systems-index.md、相关 GDD 和 docs/architecture/tr-registry.yaml。
  4. 生成引擎专属辅助。
  5. 生成系统专属辅助:仅读取所需 GDD 章节(通过 Grep 匹配 Formulas、Edge Cases、Detailed Rules、Detailed Design 等标题),提取数据类型、公式变量及其边界、Edge Cases 中提到的常见测试场景,生成 tests/helpers/[system]_factory.[ext]。
  6. 写入输出:先展示将要创建的文件摘要,询问是否允许写入辅助根目录。绝不覆盖已有文件,若文件已存在则报告跳过。写入后给出完成结论及使用提示(Godot 的 class_name 自动导入;Unity 添加 using 指令或引用测试程序集;Unreal 从模块内 #include "Tests/Helpers/GameTestHelpers.h")。

适用场景

  • 在 /test-setup 搭建框架之后(首次)
  • 多个测试文件重复相同的 setup 样板代码时
  • 开始为新系统编写测试时

限制与约束

  • 断言必须使用项目配置的测试框架的断言 API(由 testing.framework 解析),绝不使用裸 assert()。裸 assert() 有两个静默问题:它会中止运行而非让测试失败,导致第一个失败掩盖后续所有结果;它在 release 构建中会被剥离,使辅助库在最需要检查的构建中完全停止断言且无任何错误。
  • 生成代码前必须查找配置框架的断言形式,不得把本文件或其他技能示例中的形式当作权威(assert_eq、assert_true、assert_that 在仓库中都有出现且不一致)。若无法确认项目框架的正确 API,应说明并生成空辅助,而不是猜测。
  • 辅助不得继承框架的测试套件基类。tests/helpers/ 中继承套件类型的文件会被运行器发现为零测试的测试套件。辅助是普通类,只有真正的测试文件才继承套件。
  • 自动化模式:解析 modes.automation(project.local.yaml → project.yaml → 默认 collaborative)。每次 AskUserQuestion 调用和每次文件写入都遵循 .claude/docs/automation-modes.md(collaborative 总是询问 · guided 仅主要项 · autonomous 记录并继续;automation_always_ask 类别总是提示)。
  • 绝不覆盖已有辅助,它们可能包含手写内容。
  • 关于收费、价格、平台等具体信息暂未提供。