adachsoft/phpunit-runner-tool
Flexible PHPUnit runner tool for adachsoft/ai-tool-call. This library provides a single, versatile tool to run PHPUnit tests in various project configurations.
⚠️ Breaking Changes in v0.2.0
Configuration keys changed from camelCase to snake_case to comply with adachsoft/ai-tool-call 2.0.0 standards:
basePath → base_path
phpunitPath → phpunit_path
defaultCoverage → default_coverage
defaultMaxErrors → default_max_errors
defaultTimeout → default_timeout
Installation
composer require adachsoft/phpunit-runner-tool
Quick Start
Register the tool with adachsoft/ai-tool-call:
use AdachSoft\AiToolCall\AiToolCallFacadeBuilder;
use AdachSoft\AiToolCall\SPI\Collection\ConfigMap;
use AdachSoft\PhpUnitRunnerTool\Tool\PhpUnitRunnerToolFactory;
$facade = (new AiToolCallFacadeBuilder())
->withSpiFactories([new PhpUnitRunnerToolFactory()])
->withToolConfigs([
'phpunit_runner' => new ConfigMap([
'base_path' => '/path/to/your/project',
'phpunit_path' => 'vendor/bin/phpunit',
]),
])
->build();
Usage Examples
Run All Tests
$result = $facade->callTool('phpunit_runner', []);
Run Single Test File
$result = $facade->callTool('phpunit_runner', [
'path' => 'tests/Unit/UserServiceTest.php',
]);
Run Tests in Directory
$result = $facade->callTool('phpunit_runner', [
'path' => 'tests/Integration',
]);
With Custom Configuration
$result = $facade->callTool('phpunit_runner', [
'path' => 'tests/Unit',
'phpunit_xml' => 'custom-phpunit.xml',
'filter' => 'testUserCreation',
'coverage' => false,
'max_errors' => 3,
'timeout' => 60,
]);
Configuration Options
path | string | null | Path to test file or directory (relative to base_path or absolute). Empty string is treated as null and runs all tests. |
phpunit_xml | string | null | Custom PHPUnit configuration file (relative to base_path or absolute). |
filter | string | null | Test method name or pattern filter. |
coverage | bool | true | Enable code coverage. |
max_errors | int | 5 | Maximum detailed errors to return. |
timeout | int | null | Execution timeout in seconds for this call. Cannot exceed configured max_timeout (if set). |
Configuration in ToolFactory
When registering the tool, you can configure:
new ConfigMap([
'base_path' => '/absolute/path/to/project',
'phpunit_path' => 'vendor/bin/phpunit',
'default_coverage' => true,
'default_max_errors' => 5,
'default_timeout' => null,
'max_timeout' => null,
'display_notices' => false,
'display_warnings' => false,
'display_deprecations' => false,
'display_phpunit_notices' => true,
'display_phpunit_deprecations' => true,
])
By default, the underlying runner always passes --display-phpunit-notices,
--display-phpunit-deprecations and --display-skipped to PHPUnit so that
framework-level notices, deprecations and skipped tests are visible without
additional configuration.
Response Format
The tool returns an array with:
[
'stdout' => 'PHPUnit output...',
'stderr' => 'Error output...',
'exit_code' => 0,
'success' => true,
]
Error Handling
The tool throws ToolExecutionException for:
- Non-existent test paths
- Invalid PHPUnit configuration
- Command execution failures
- Timeout errors
- Permission issues
Additionally, the tool throws InvalidArgumentException when:
path points to an excluded folder configured via excluded_folders
timeout or max_errors parameters are of invalid types
timeout exceeds the configured max_timeout limit when such a limit is set
Static Analysis & Code Style
This project uses the shared adachsoft/php-code-style configuration for:
- PHP-CS-Fixer ruleset (imported via
.php-cs-fixer.php → vendor/adachsoft/php-code-style/.php-cs-fixer.dist.php),
- PHPStan configuration (via
phpstan.neon including vendor/adachsoft/php-code-style/phpstan.neon.dist),
- Rector base config (imported via
rector.php → vendor/adachsoft/php-code-style/rector.dist.php).
Recommended Composer scripts:
"scripts": {
"cs:check": "php-cs-fixer fix --dry-run --diff --config=.php-cs-fixer.php",
"cs:fix": "php-cs-fixer fix --config=.php-cs-fixer.php",
"stan": "phpstan analyse",
"rector": "rector"
}
Run tools via:
composer cs:check
composer cs:fix
composer stan
composer rector
Requirements
- PHP >= 8.3
- PHPUnit installed in target project
- adachsoft/ai-tool-call ^2.0.0
- adachsoft/command-executor-lib ^2.0
License
MIT