All skills
thedivergentai avatar

/godot-testing-patterns

@9d6e91e

Expert testing decision trees for GdUnit4: unit vs scene vs CI gates, headless runners, snapshots, and mock networks. Use when choosing test layers, wiring CI, or validating signals/physics without beginner assert catalogs. Keywords: GdUnit4, GdUnitTestSuite, headless CI, snapshot test, mock network, scene integration test, TDD.

Use this Skill: https://skilld.dev/gh/thedivergentai/gd-agentic-skills/godot-testing-patterns

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ89 tokens always: the name and description. β‰ˆ2.8k when used: this file. β‰ˆ1.4k more on demand in 3 files.

Decision Tree β†’ Scripts

Need Choice Script (MANDATORY when chosen)
Pure logic / no tree Unit basic_unit_test.gd, mock_dependency_test.gd, test_data_factory.gd
Node interaction after instantiate Scene integration scene_integration_test.gd, integration_test_base.gd
Signal contracts Unit or scene signal_emission_test.gd
Multi-frame / physics step Async scene wait_for_frame_test.gd, physics_collision_test.gd
Flaky physics / timing races Frame step gate MANDATORY wait_for_frame_test.gd β€” never wall-clock sleep
CI / no display Headless gate MANDATORY headless_test_runner.gd
Save/UI regression Snapshot MANDATORY snapshot_tester.gd
RPC without live peers Mock network MANDATORY mock_network_provider.gd
Perf budget in CI Benchmark gate performance_benchmark_runner.gd
Orphans after suite Leak detect memory_leak_detector.gd
Edge input space Fuzz parameter_fuzz_tester.gd

Do NOT Load assert-catalog tutorials or manual gameplay checklists into context β€” pick a row, read the script, implement.

MANDATORY Triggers

  • CI / --headless: always read headless_test_runner.gd first (OS.exit_code, GdUnit4 CLI: godot --headless -s addons/gdUnit4/bin/GdUnitCmdTool.gd -a res://test).
  • State or visual golden files: read snapshot_tester.gd before writing JSON/image goldens. Approve workflow: first run saves reference; intentional UI change β†’ delete or overwrite res://tests/snapshots/<name>.png, re-run to regenerate, commit new golden; never hand-edit PNG bytes.
  • Any RPC / MultiplayerSynchronizer test: read mock_network_provider.gd before standing up real peers.

Available Scripts

basic_unit_test.gd

Minimal GdUnit4 (GdUnitTestSuite) structure for pure logic.

signal_emission_test.gd

Signal emission monitoring for decoupled architectures.

mock_dependency_test.gd

Mocks/doubles to isolate external services.

scene_integration_test.gd / integration_test_base.gd

Scene lifecycle + node interaction fixtures.

headless_test_runner.gd

CI headless orchestration and exit codes.

snapshot_tester.gd

Dictionary/UI golden snapshot comparison.

mock_network_provider.gd

Loopback / offline multiplayer peer for RPC tests.

performance_benchmark_runner.gd

Microsecond timers + Performance monitor gates.

memory_leak_detector.gd

Orphan node detection across long suites.

parameter_fuzz_tester.gd

Randomized ranges for edge crashes.

wait_for_frame_test.gd / physics_collision_test.gd

Frame/physics-step async verification.

test_data_factory.gd

Schema-compliant fixture builders.

NEVER Do in Testing (GdUnit4)

  • NEVER test private implementation details β€” Assert public behavior only.
  • NEVER share mutable state between tests β€” Fresh setup per test (before_test / equivalent).
  • NEVER use wall-clock sleep / blind timers β€” Prefer frame steppers from wait_for_frame patterns.
  • NEVER skip cleanup β€” Free instantiated nodes after each test.
  • NEVER test randomness without seeding.
  • NEVER assert signals without the GdUnit signal assert/monitor helpers from signal_emission_test.gd.
  • NEVER mix GUT and GdUnit4 APIs in one suite.
  • NEVER rely on editor-only features for CI β€” Headless-compatible tests only.
  • NEVER default to full-level integration tests β€” Prefer unit + small scene tests; escalate only when the decision tree says so.
  • NEVER hardcode brittle absolute file paths in fixtures.
  • NEVER test third-party plugin internals β€” Test your integration only.

Expert Gates (short)

  • Snapshot: serialize β†’ compare golden (snapshot_tester.gd); regenerate reference PNG on approved visual changes.
  • CI: --headless + OS.exit_code non-zero on failure (headless_test_runner.gd).
  • Network: mock peer before real ENet (mock_network_provider.gd).
  • Perf: Performance monitors / draw-call caps in benchmark runner.

Deep recipes (on demand)

LLM-ignorance rule: if a general agent would not know it before reading, it lives here or in scripts/ β€” never delete, only move.

Topic Reference
Snapshot / CI / fuzz / perf expert-testing-patterns.md
Release smoke checklist manual-testing-checklist.md

Reference

Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain β€” do not preload the whole lattice.

Official Documentation

Related Skills

Prerequisites
Complements
Downstream / consumers
Master
  • godot-master β€” library router and mirrored module entry for cross-skill discovery.

Source: SKILL.md on GitHub

No alerts16d4 checks Β· Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides standard boilerplate and expert patterns for unit and integration testing in the Godot Engine using the GdUnit4 framework. It includes utilities for headless CI, visual regression, and network mocking. All identified patterns align with standard software testing practices for game development.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW Β· No issues

  • Runlayer7mo

    3 files scanned Β· No issues

Signed by skilld at 9d6e91e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 weeks ago.

Activeupdated 2 months ago

README badge

README badge for thedivergentai/gd-agentic-skills/godot-testing-patterns