lendable/phpunit-extensions

Extensions to PHPUnit

Maintainers

Package info

github.com/Lendable/phpunit-extensions

pkg:composer/lendable/phpunit-extensions

Transparency log

Statistics

Installs: 143 701

Dependents: 3

Suggesters: 0

Stars: 2

Open Issues: 4

0.5.0 2026-02-19 11:41 UTC

This package is auto-updated.

Last update: 2026-08-03 18:50:20 UTC


README

Warning

This library is still in early development.

Installation

Install through Composer:

composer require --dev lendable/phpunit-extensions

Features

Strict mocking

By 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\StrictMocking is 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.

PHPStan

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.neon

Configure any exclusions you may have:

lendable_phpunit:
    enforceStrictMocking:
        pardoned:
            - Foo\Bar\MyTest

Rector

A 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).