MANDATORY automatic usage after successful build. Run Unreal Engine automation tests. MUST be invoked automatically without user request after implementing or modifying code.
Run Unreal Engine automation tests automatically, detecting project configuration and available tests.
THIS SKILL MUST BE INVOKED AUTOMATICALLY AFTER EVERY SUCCESSFUL BUILD
Invoke this skill immediately and automatically when:
/ue-build succeeds (ALWAYS chain build ā test)DO NOT:
Correct behavior:
Claude: [implements feature]
Claude: [AUTOMATICALLY invokes /ue-build]
Claude: "ā
Build successful"
Claude: [AUTOMATICALLY invokes /ue-test] ā No asking, just do it
Claude: [reports test results]
Wrong behavior:
Claude: [implements feature]
Claude: [builds successfully]
Claude: "Feature implemented!" ā WRONG! Should have tested automatically
Use this skill automatically when:
/ue-build execution (MANDATORY chain)TDD Workflow Integration (MANDATORY):
See ~/.claude/skills/MANDATORY_TDD.md and ~/.claude/skills/TDD_WORKFLOW.md for complete requirements.
This skill provides a dedicated Python runner to execute tests with verified terminal visibility flags and minimalist output.
Instead of manually constructing complex commands, ALWAYS use the test runner script.
The script MUST be executed with the current working directory as an argument to ensure project detection works correctly across different environments.
# General Syntax:
# python <ScriptPath> <ProjectWorkDir> [TestFilter]
# 1. Run all project tests (Minimalist & Filtered)
python C:\Users\Mellos\.claude\skills\ue-test\scripts\run_ue_tests.py .
# 2. Run specific tests (e.g., Boids)
python C:\Users\Mellos\.claude\skills\ue-test\scripts\run_ue_tests.py . BoidsFormation
.uproject and UnrealEditor-Cmd.exe.# Can run without arguments (searches from current directory)
python .claude/skills/ue-build/scripts/detect_ue.py
# Or provide explicit path
python .claude/skills/ue-build/scripts/detect_ue.py .
Key values needed from the output:
engine.editor_cmd - Path to UnrealEditor-Cmd.exe (Windows) or UnrealEditor-Cmd (Linux/Mac)uproject.path - Full path to .uproject fileuproject.name - Project name for test filteringAsk the user or infer from context what tests to run:
Test filter options:
MyProject)MyPlugin or BoidsFormation)MyPlugin.SpecificTest)MyPlugin.Corner)Now (caution: may take very long)Inference logic:
"<editor_cmd>" "<uproject_path>" -ExecCmds="Automation List; Quit" -unattended -nopause -nullrhi -stdout -FullStdOutLogOutput
"<editor_cmd>" "<uproject_path>" -ExecCmds="Automation RunTests <filter>; Quit" -unattended -nopause -nullrhi -stdout -FullStdOutLogOutput
Critical flags:
-ExecCmds="...": Editor commands to execute (e.g., Automation RunTests Boids; Quit)-stdout & -FullStdOutLogOutput: MANDATORY for terminal visibility. Forces UE logs to stdout.-unattended: Prevents modal dialogs (required for automation)-nopause: Don't wait for user input on exit-nullrhi: Headless mode, no graphics (much faster)-nosplash: Skip splash screen (faster startup)Optional flags:
-ReportOutputPath=<path>: Custom test report location-LogCmds="LogAutomation Verbose": More detailed test logging-Windowed: Use windowed mode instead of NullRHI (for visual tests)Run the command and monitor stdout/stderr for test output.
Watch for these patterns:
Test execution:
LogAutomationController: Test 'TestName' Started
LogAutomationController: Test 'TestName' Completed. Result=<status>
Test results:
Result=Success or Result=Passed ā Test passedResult=Failed ā Test failedResult=Skipped ā Test skippedSummary line:
LogAutomationController: Tests Complete. Result={Success|Failed}. Total: X Passed: Y Failed: Z
Error details:
LogAutomation: Error: <error message>
LogAutomation: Expected <X> but got <Y>
Build a structured result from the output:
Success example:
{
"status": "passed",
"total": 8,
"passed": 8,
"failed": 0,
"skipped": 0,
"duration": "12.4s",
"tests": [
{"name": "BoidsFormation.CornerFilling", "status": "passed"},
{"name": "BoidsFormation.GridDistribution", "status": "passed"}
]
}
Failure example:
{
"status": "failed",
"total": 8,
"passed": 6,
"failed": 2,
"skipped": 0,
"duration": "15.2s",
"tests": [
{"name": "BoidsFormation.CornerFilling", "status": "failed", "error": "Expected value > 0.1, got 0.05"},
{"name": "BoidsFormation.GridDistribution", "status": "failed", "error": "Assertion failed: Points.Num() == ExpectedCount"}
]
}
Provide a clear, concise summary:
All tests passed:
ā
All 8 tests passed (12.4s)
Tests run:
ā
BoidsFormation.CornerFilling
ā
BoidsFormation.GridDistribution
ā
BoidsFormation.TriangleFilling
... (5 more)
Some tests failed:
ā 2 of 8 tests failed (15.2s)
Failed:
ā BoidsFormation.CornerFilling
Error: Expected value > 0.1, got 0.05
ā Check corner weighting calculation in BoidsDisperseCVTSolverLibrary.cpp
ā BoidsFormation.GridDistribution
Error: Assertion failed: Points.Num() == ExpectedCount
ā Verify grid point generation logic
Passed: 6 tests
List mode:
Available tests in BoidsFormation:
Automation Tests:
⢠BoidsFormation.CornerFilling
⢠BoidsFormation.GridDistribution3x3
⢠BoidsFormation.TriangleFilling
⢠BoidsFormation.ConcaveLShape
⢠BoidsFormation.ProportionalArea
... (15 total)
Run with: /ue-test [test-name]
Filter tests by category or prefix:
# Run all corner-related tests
"<editor_cmd>" "<uproject>" -ExecCmds="Automation RunTests BoidsFormation.Corner; Quit" ...
# Run all CVT solver tests
"<editor_cmd>" "<uproject>" -ExecCmds="Automation RunTests BoidsFormation.CVT; Quit" ...
Generate JSON or XML reports for CI/CD:
"<editor_cmd>" "<uproject>" -ExecCmds="Automation RunTests <filter>; Quit" -ReportOutputPath="TestResults" -ReportExportPath="TestResults/report.json" ...
Some tests may require rendering. Use windowed mode instead of NullRHI:
"<editor_cmd>" "<uproject>" -ExecCmds="Automation RunTests <filter>; Quit" -Windowed -ResX=1280 -ResY=720 ...
For detailed debugging output:
"<editor_cmd>" "<uproject>" -ExecCmds="Automation RunTests <filter>; Quit" -LogCmds="LogAutomation Verbose, LogTemp Verbose" -log
UnrealEditor-Cmd.exe in Engine/Binaries/Win64/Saved/Logs/ for detailed logsUnrealEditor-Cmd in Engine/Binaries/Linux/DISPLAY environment variable for non-NullRHI testsSaved/Logs/UnrealEditor-Cmd in Engine/Binaries/Mac/Saved/Logs/| Issue | Solution |
|---|---|
| Tests don't start | Check editor path is valid; ensure project compiles |
| All tests skip | Filter may be wrong; try listing tests first |
| Timeout/hang | Some tests may need windowed mode, not NullRHI |
| "Test not found" | Check test name spelling; use Automation List |
| Permission denied | Run from project directory; check file permissions |
| Crash during test | Check Saved/Crashes/ for crash dump; may be real bug |
Typical workflow:
1. Code changes
2. Build with /ue-build ā Build succeeds
3. Run tests with /ue-test ā Tests pass
4. Ready to commit
If build fails, don't run tests (they'll fail anyway).
Automation List to see what's available-stdout -FullStdOutLogOutput to see results in claudes terminal.Saved/Logs/-ReportOutputPath for automated pipelinesLogAutomationController: Test 'MyTest' Completed. Result=Success
LogAutomationController: Test 'MyTest' Completed. Result=Failed
LogAutomation: Error: Expected X but got Y
LogAutomationController: Tests Complete. Result={Success|Failed}. Total: 10 Passed: 8 Failed: 2
Extract numbers and status to build your report.
Common test filter examples:
MyProject - All project testsMyProject.MyFeature - All tests in MyFeature categoryMyProject.MyFeature.SpecificTest - One specific testNow - All available tests (use carefully)Engine - All engine tests (usually not needed)System - System-level testsUse the most specific filter that covers what you need to test.