abstract class UnitTestCase extends TestCase

Base test case for coroutine-aware tests that do not boot an application.

Use Hypervel\Testbench\TestCase when a test needs an application.

Traits

Properties

protected bool $runTestsInCoroutine from  RunTestsInCoroutine
protected bool $copyNonCoroutineContext from  RunTestsInCoroutine
protected Throwable|null $exceptionOutlivedByChildCoroutines

The exception the test threw before its child coroutines reached the time limit.

from  RunTestsInCoroutine

Methods

void
setEnvironmentValue(string $key, string $value)

Set an environment variable for the current PHP process.

void
unsetEnvironmentValue(string $key)

Unset an environment variable for the current PHP process.

mixed
withEnvironmentValue(string $key, string|null $value, Closure $callback)

Run a callback with a temporary environment variable value.

mixed
withEnvironmentValues(array $values, Closure $callback)

Run a callback with temporary environment variable values.

void
tearDownTheTestEnvironmentUsingMockery()

Tear down the testing environment using Mockery.

mixed
invokeTestMethod(string $methodName, array $testArguments)

Invoke the test method inside a Swoole coroutine container.

void
enforceCoroutineTestTimeLimit(TimeoutException|null $timeoutException, bool $rootCompleted)

Enforce PHPUnit's deadline while the test or its children are suspended.

void
assertChildCoroutinesFinishedBeforeTimeLimit()

Fail a test whose expected exception was followed by child coroutines reaching the time limit.

bool
runsTestsInCoroutine()

Determine whether tests run in a coroutine.

bool
shouldBootFrameworkForTest()

Determine if framework lifecycle hooks should run for this test.

void
invokeSetupInCoroutine()

Run trait and test setup hooks in the test coroutine.

void
invokeTearDownInCoroutine(callable $capture)

Run test and trait teardown hooks while capturing failures.

void
clearNonCoroutineTransactionContext()

Clear transaction context from non-coroutine storage before test starts.

void
cleanupTestContext()

Clean up Context keys that cause test pollution.

void
tearDown()

Clean up the testing environment after the test.

void
flushExceptionHandlerState()

Flush the global exception-handler state.

Details

protected void setEnvironmentValue(string $key, string $value)

Set an environment variable for the current PHP process.

Parameters

string $key
string $value

Return Value

void

protected void unsetEnvironmentValue(string $key)

Unset an environment variable for the current PHP process.

Parameters

string $key

Return Value

void

protected mixed withEnvironmentValue(string $key, string|null $value, Closure $callback)

Run a callback with a temporary environment variable value.

Parameters

string $key
string|null $value
Closure $callback

Return Value

mixed

protected mixed withEnvironmentValues(array $values, Closure $callback)

Run a callback with temporary environment variable values.

Parameters

array $values
Closure $callback

Return Value

mixed

protected void tearDownTheTestEnvironmentUsingMockery()

Tear down the testing environment using Mockery.

Return Value

void

protected mixed invokeTestMethod(string $methodName, array $testArguments)

Invoke the test method inside a Swoole coroutine container.

Uses PHPUnit 13's official extension point for customizing test method invocation. When coroutines are enabled and we're not already inside one, the test method runs inside Hypervel's coroutine container with full lifecycle management (context copying, setup/teardown hooks, cleanup).

Parameters

string $methodName
array $testArguments

Return Value

mixed

in RunTestsInCoroutine at line 132
protected void enforceCoroutineTestTimeLimit(TimeoutException|null $timeoutException, bool $rootCompleted)

Enforce PHPUnit's deadline while the test or its children are suspended.

Parameters

TimeoutException|null $timeoutException
bool $rootCompleted

Return Value

void

in RunTestsInCoroutine at line 208
protected void assertChildCoroutinesFinishedBeforeTimeLimit()

Fail a test whose expected exception was followed by child coroutines reaching the time limit.

Return Value

void

in RunTestsInCoroutine at line 223
protected bool runsTestsInCoroutine()

Determine whether tests run in a coroutine.

Return Value

bool

in RunTestsInCoroutine at line 231
protected bool shouldBootFrameworkForTest()

Determine if framework lifecycle hooks should run for this test.

Return Value

bool

in RunTestsInCoroutine at line 239
protected void invokeSetupInCoroutine()

Run trait and test setup hooks in the test coroutine.

Return Value

void

in RunTestsInCoroutine at line 257
protected void invokeTearDownInCoroutine(callable $capture)

Run test and trait teardown hooks while capturing failures.

Parameters

callable $capture

Return Value

void

in RunTestsInCoroutine at line 280
protected void clearNonCoroutineTransactionContext()

Clear transaction context from non-coroutine storage before test starts.

RefreshDatabase starts its wrapper transaction in setUp() (outside coroutine), storing it in nonCoroutineContext. We must preserve this data for copying into the coroutine. Only clear if there are no pending transactions (meaning any data is stale from a previous test that didn't clean up properly).

Return Value

void

in RunTestsInCoroutine at line 296
protected void cleanupTestContext()

Clean up Context keys that cause test pollution.

Only forgets specific keys known to leak between tests. Does not use CoroutineContext::flush() because that would flush data needed by defer callbacks (e.g., Redis connections waiting to be released).

Return Value

void

at line 29
protected void tearDown()

Clean up the testing environment after the test.

Return Value

void

at line 53
protected void flushExceptionHandlerState()

Flush the global exception-handler state.

Return Value

void