lastdragon-ru/phpunit-extensions
PHPUnit extensions for PHP projects, adding extra test utilities and helpers to streamline assertions, fixtures, and test setup. Designed to integrate cleanly with PHPUnit and improve developer productivity in automated testing workflows.
Various useful assertions/extensions for PHPUnit.
| Requirement | Constraint | Supported by |
|---|---|---|
| PHP | ^8.5 |
HEAD ⋯ 11.0.0 |
^8.4 |
HEAD ⋯ 10.0.0 |
|
^8.3 |
10.3.0 ⋯ 10.0.0 |
|
| PHPUnit | ^13.0.0 |
HEAD ⋯ 11.0.0 |
^12.0.0 |
10.3.0 ⋯ 10.0.0 |
|
^11.3.0 |
10.3.0 ⋯ 10.1.0 |
|
^11.2.0 |
10.0.0 |
[!NOTE]
The package intended to use in dev.
composer require --dev lastdragon-ru/phpunit-extensions
[!NOTE] You can include all available extensions via
<?xml version="1.0" encoding="UTF-8"?> <phpunit> <!-- ... --> <extensions> <bootstrap class="\LastDragon_ru\PhpUnit\Extensions\Extension"/> </extensions> <!-- ... --> </phpunit>
By default, PHPUnit compares scalars via == operator, so Assert::assertEquals(1, true) will pass. The extension adds own Comparator to compare scalars via === operator.
To register extension update your phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<!-- ... -->
<extensions>
<bootstrap class="\LastDragon_ru\PhpUnit\Extensions\StrictScalarComparator\Extension"/>
</extensions>
<!-- ... -->
</phpunit>
PHPUnit provides several attributes like \PHPUnit\Framework\Attributes\RequiresPhp that allow skip the test if the condition doesn't meet. But there is no way to check if the specific composer package is installed or not. The extension fills this gap.
To register extension update your phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<!-- ... -->
<extensions>
<bootstrap class="\LastDragon_ru\PhpUnit\Extensions\Requirements\Extension"/>
</extensions>
<!-- ... -->
</phpunit>
<?php declare(strict_types = 1);
namespace LastDragon_ru\PhpUnit\Docs\Examples;
use Composer\InstalledVersions;
use LastDragon_ru\PhpUnit\Extensions\Requirements\Attributes\RequiresPackage;
use PHPUnit\Framework\TestCase;
/**
* @internal
*/
#[RequiresPackage('phpunit/phpunit')]
final class RequirementsExtensionTest extends TestCase {
#[RequiresPackage('phpunit/phpunit', '>=10.0.0')]
public function testSomething(): void {
self::assertTrue(InstalledVersions::isInstalled('phpunit/phpunit'));
}
}
The DirectoryPath/FilePath have internal properties which make direct comparison impossible. The extension provides a special comparator that compares paths via Path::equals().
To register extension update your phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<!-- ... -->
<extensions>
<bootstrap class="\LastDragon_ru\PhpUnit\Extensions\PathComparator\Extension"/>
</extensions>
<!-- ... -->
</phpunit>
[!NOTE] You can include all available assertions via
use\LastDragon_ru\PhpUnit\Assertionsor only needed via individual traits like\LastDragon_ru\PhpUnit\Filesystem\Assertions.
\LastDragon_ru\PhpUnit\Filesystem\Assertions::assertDirectoryEquals() - Asserts that Directory equals Directory.\LastDragon_ru\PhpUnit\Filesystem\Assertions::assertDirectoryEmpty() - Asserts that Directory empty.DirectoryEqualsCompares two directories. By default, directories are equal if the list of
their children is the same, and files have the same content. Permissions are
ignored. You can override \self::properties() and \self::equal()
to customize comparison logic.
TestDataSmall helper to load data associated with test.
TempFileCreates a temporary file in the system temp directory. The file will be removed after the instance removal.
TempDirectoryCreates a temporary directory in the system temp directory. The directory will be removed after the instance removal.
Please follow Upgrade Guide.
Please use the main repository to report issues, send pull requests, or ask questions.
How can I help you explore Laravel packages today?