Table of Contents

Class DevTestRunner

Namespace
GrindFest
Assembly
GrindFest.dll

In-game developer test runner. Discovers all DevTest subclasses and runs their public IEnumerator methods as test cases in the live game. No NUnit, no scene reload.

Run all tests: Ctrl+Shift+T or DevTestRunner.Instance.RunAllTests()
Run filtered:DevTestRunner.Instance.RunAllTests("PourWater") (substring match on ClassName.MethodName)

[DefaultExecutionOrder(-200)]
public class DevTestRunner : Singleton<DevTestRunner>
Inheritance
object
DevTestRunner
Inherited Members

Fields

ProbeMenuAfterEachTest

When set, every test is followed by "can the main menu still be opened?" and the verdict is logged, naming the first test after which it cannot be.

Properties

IsRunning
LastLogFilePath

Path to the most recent test run log file.

Methods

ReportWorld()

What the world actually looks like to a test, in one log line. Written because two separate false trails during the 2026-09-20 WebGL run came from asking the scene listing (which walks root objects only) whether a component exists — a component on a child answered "not found" while being present. This asks the engine directly, including the navmesh triangulation, which is the ground truth for "is there a navmesh anywhere".

Parameterless on purpose: the agent bridge invokes by reflection and cannot pass arguments.

RunAll()

Parameterless entry point for the agent bridge. Reflection cannot supply an optional argument, so unity_call(DevTestRunner, RunAllTests) finds nothing to invoke — this is the name to call over the bridge, and the pattern to copy for anything else the bridge should be able to reach.

RunAllTests(string)

Run tests. If filter is provided, only tests whose "ClassName.MethodName" contains the filter (case-insensitive) will run. Returns the path to the log file.