用途
本技能用于在 Godot 项目中做测试分层决策:当需要选择测试层级、接入 CI、或在无初学者断言目录的情况下验证信号与物理时使用。核心是一张“决策树 → 脚本”的对照表,按需求直接指向对应脚本,而不是加载断言教程或手动玩法清单。
主要能力
决策表覆盖以下需求与选择:
- 纯逻辑、无场景树:单元测试,对应 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。
- 涉及状态或视觉黄金文件时,先读 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 的夹具。
适用场景
适合需要为 Godot 项目建立测试体系、接入无头 CI、验证信号与物理、做存档/UI 回归、模拟网络 RPC、设置性能门禁或进行模糊测试的开发者。
限制与禁止事项
- 绝不要测试私有实现细节,只断言公开行为。
- 绝不要在测试之间共享可变状态,每个测试使用全新 setup(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 监控或绘制调用上限。
深入配方
按需查阅:快照/CI/模糊/性能见 expert-testing-patterns.md;发布冒烟清单见 manual-testing-checklist.md。
参考
官方文档链接包括命令行教程、调试工具概览、自定义性能监控、空闲与物理处理、SceneTree 使用、节点与场景实例、信号实例化、高层多人、InputEvent、随机数生成、存档、物理介绍。相关技能分为前置(godot-project-foundations、godot-gdscript-mastery、godot-signal-architecture)、互补(godot-debugging-profiling、godot-scene-management、godot-input-handling、godot-2d-physics、godot-resource-data-patterns、godot-save-load-systems)、下游消费者(godot-monte-carlo-balancer、godot-performance-optimization、godot-multiplayer-networking、godot-export-builds)以及主路由 godot-master。