Warning
This library is still in early development.
Install through Composer:
composer require --dev lendable/phpunit-extensionsBy default, when creating a mock all method return values are stubbed based on typing information. E.g.
public function foo(): int
{
return $this->foo;
}Will be stubbed to return 0. This library ships two mechanisms to simplify disabling this functionality to force all methods called on a mock to be configured explicitly.
- If you extend from
Lendable\PHPUnitExtensions\TestCase, this will be enabled. If you can just extend from this class it is the simplest way to opt-in to all functionality. - The trait
Lendable\PHPUnitExtensions\StrictMockingis provided to enable this alone. If you are forced into using another abstract*TestCase(e.g. from a vendor) this can be added into the class hierarchy.
A PHPStan extension is provided to enforce usage of features of this library.
Add the rules into your PHPStan configuration:
rules:
# ...
- vendor/lendable/phpunit-extensions/phpstan/rules.neonConfigure any exclusions you may have:
lendable_phpunit:
enforceStrictMocking:
pardoned:
- Foo\Bar\MyTestA Rector rule is provided to automate adopting strict mocking across a test suite.
Lendable\PHPUnitExtensions\Rector\EnforceDisableReturnValueGenerationForTestDoublesRector adds PHPUnit's #[DisableReturnValueGenerationForTestDoubles] attribute to test classes that do not already have it. Abstract classes are skipped, since the attribute only has an effect when placed on the concrete test class.
Register the rule in your Rector configuration:
use Lendable\PHPUnitExtensions\Rector\EnforceDisableReturnValueGenerationForTestDoublesRector;
use Rector\Config\RectorConfig;
return RectorConfig::configure()
// ...
->withRules([EnforceDisableReturnValueGenerationForTestDoublesRector::class]);With the closure-style configuration, register it via $rectorConfig->rule(EnforceDisableReturnValueGenerationForTestDoublesRector::class).