SuperAPI AI 工具集

godot-testing-patterns

测试与质量

查看项目

更新于 10-15 02:00

技能介绍

用途

本技能用于在 Godot 引擎项目中使用 GdUnit4 编写测试时,按需求选择正确的测试层级与配套脚本,避免盲目加载教程或手动测试清单。核心思路是“决策树 → 脚本”:确定测试属于哪一类场景,再读取对应脚本并实现。

主要能力与决策路径

技能给出多类测试需求与对应选择及脚本:

  • 纯逻辑、无场景树:单元测试,对应 basic_unit_test.gd、mock_dependency_test.gd、test_data_factory.gd。
  • 实例化后的节点交互:场景集成测试,对应 scene_integration_test.gd、integration_test_base.gd。
  • 信号契约:单元或场景,对应 signal_emission_test.gd。
  • 多帧或物理步进:异步场景,对应 wait_for_frame_test.gd、physics_collision_test.gd。
  • 物理或时序偶发不稳定:帧步进门,强制使用 wait_for_frame_test.gd,禁止墙钟 sleep。
  • CI 或无显示环境:无头门,强制使用 headless_test_runner.gd。
  • 存档或 UI 回归:快照,强制使用 snapshot_tester.gd。
  • 无真实对等端的 RPC:模拟网络,强制使用 mock_network_provider.gd。
  • CI 中的性能预算:基准门,对应 performance_benchmark_runner.gd。
  • 套件结束后的孤儿节点:泄漏检测,对应 memory_leak_detector.gd。
  • 边缘输入空间:模糊测试,对应 parameter_fuzz_tester.gd。

强制触发条件

  • CI 或 --headless:始终先读 headless_test_runner.gd,使用 OS.exit_code,GdUnit4 CLI 命令为 godot --headless -s addons/gdUnit4/bin/GdUnitCmdTool.gd -a res://test。
  • 状态或视觉金样文件:写 JSON 或图片金样前先读 snapshot_tester.gd。审批流程为:首次运行保存参考;有意的 UI 变更则删除或覆盖 res://tests/snapshots/<name>.png,重新运行生成并提交新金样;不得手动编辑 PNG 字节。
  • 任何 RPC 或 MultiplayerSynchronizer 测试:在搭建真实对等端前先读 mock_network_provider.gd。

可用脚本

basic_unit_test.gd 提供纯逻辑的最小 GdUnit4(GdUnitTestSuite)结构;signal_emission_test.gd 用于解耦架构的信号发射监控;mock_dependency_test.gd 用 mock/替身隔离外部服务;scene_integration_test.gd 与 integration_test_base.gd 提供场景生命周期与节点交互夹具;headless_test_runner.gd 负责 CI 无头编排与退出码;snapshot_tester.gd 做字典/UI 金样快照比对;mock_network_provider.gd 提供回环或离线多人对等端用于 RPC 测试;performance_benchmark_runner.gd 使用微秒计时器与 Performance 监视器门限;memory_leak_detector.gd 在长套件中检测孤儿节点;parameter_fuzz_tester.gd 对随机范围做边缘崩溃测试;wait_for_frame_test.gd 与 physics_collision_test.gd 做帧/物理步进的异步验证;test_data_factory.gd 构建符合 schema 的夹具。

GdUnit4 测试中的禁止事项

禁止测试私有实现细节,只断言公开行为;禁止在测试间共享可变状态,每个测试用 before_test 或等价机制做全新设置;禁止使用墙钟 sleep 或盲目计时器,优先使用 wait_for_frame 模式的帧步进;禁止跳过清理,每个测试后释放实例化节点;禁止在未播种的情况下测试随机性;禁止不用 signal_emission_test.gd 中的 GdUnit 信号断言/监控辅助就断言信号;禁止在同一套件中混用 GUT 与 GdUnit4 API;禁止在 CI 依赖仅编辑器可用的功能,仅用无头兼容测试;禁止默认做全关卡集成测试,优先单元加小场景测试,只在决策树要求时升级;禁止在夹具中硬编码脆弱的绝对文件路径;禁止测试第三方插件内部,只测试你的集成。

专家门(简版)

快照:序列化后与金样比对(snapshot_tester.gd),在已批准的视觉变更后重新生成参考 PNG。CI:--headless 加失败时 OS.exit_code 非零(headless_test_runner.gd)。网络:先用模拟对等端再上真实 ENet(mock_network_provider.gd)。性能:在基准运行器中使用 Performance 监视器/绘制调用上限。

深层配方(按需)

LLM 无知规则:如果通用智能体在阅读前不会知道,就放在此处或 scripts/ 中,绝不删除,只移动。主题参考:快照/CI/模糊/性能见 expert-testing-patterns.md;发布冒烟清单见 manual-testing-checklist.md。参考方面建议渐进式披露:仅在研究特定 API 时打开官方文档链接,路由到对等领域时加载相关技能,不要预加载整个网格。

官方文档主题

命令行教程涉及 CI 测试运行器的 --headless、-s 与退出码模式;调试工具概述涉及失败测试需要引擎侧诊断时的调试器、分析器与远程检查;自定义性能监视器用于基准门与孤儿检测;空闲与物理处理涉及 wait_frames/yield 辅助必须遵守的帧/_physics_process 时序;使用 SceneTree 涉及无头编排器使用的树生命周期、quit() 与处理模式;节点与场景实例涉及场景集成测试的 instantiate/add_child/free 卫生;带信号实例化涉及信号发射测试验证的信号接线模式;高级多人涉及通过 OfflineMultiplayerPeer 或延迟模拟器 mock 的 RPC/对等端 API;使用 InputEvent 用于模糊测试与 UI 交互测试的合成 InputEvent* 注入;随机数生成用于确定性模糊与蒙特卡洛装置的播种;保存游戏涉及金样 JSON 与存档/读档集成测试背后的序列化/反序列化模式;物理简介涉及碰撞集成测试的层/掩码与步进时序。

相关技能

前置:godot-project-foundations(在搭建 res://test/ 套件前的项目布局、场景与资源);godot-gdscript-mastery(每个单元/集成测试使用的类型化 GDScript、await 与 assert 惯用法);godot-signal-architecture(watch_signals/信号监控断言所针对的 emit/connect 契约)。互补:godot-debugging-profiling(红测需要运行时证据时用分析器与 ObjectDB 工具);godot-scene-management(场景集成夹具镜像的场景打包/加载模式);godot-input-handling(模糊与 UI 按键测试涉及的动作映射与事件解析);godot-2d-physics(物理碰撞测试必须保持绿色的层矩阵与刚体 API);godot-resource-data-patterns(测试数据工厂与快照字典序列化所依据的 Resource schema);godot-save-load-systems(存档/读档集成与金样状态测试覆盖的持久化管线)。下游/消费者:godot-monte-carlo-balancer(复用这些装置做第 7 阶段金样单元的播种无头玩法模拟);godot-performance-optimization(CI 性能门以 Performance 监视器、绘制调用上限执行的预算);godot-multiplayer-networking(通过模拟对等端与延迟注入验证的 RPC/复制逻辑);godot-export-builds(调用相同 --headless 测试入口的无头导出/CI 管线)。主技能:godot-master 作为库路由与镜像模块入口,用于跨技能发现。

限制

上述内容基于所提供资料;未提供的具体功能、收费、价格、平台或使用步骤暂未提供。