zalas / phpunit-doubles
Initialises test doubles in PHPUnit test cases for you
Fund package maintenance!
jakzal
Installs: 11 648
Dependents: 1
Suggesters: 0
Security: 0
Stars: 16
Watchers: 4
Forks: 2
Open Issues: 2
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- phpdocumentor/reflection-docblock: ^5.2
- phpunit/phpunit: ^9.6
Requires (Dev)
- phpspec/prophecy-phpunit: ^2.0.1
Conflicts
- phpdocumentor/type-resolver: 1.3.0
README
Initialises test doubles in PHPUnit test cases for you.
Installation
Composer
composer require --dev zalas/phpunit-doubles
Phar
The extension is also distributed as a PHAR, which can be downloaded from the most recent Github Release.
Put the extension in your PHPUnit extensions directory.
Remember to instruct PHPUnit to load extensions in your phpunit.xml
:
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" extensionsDirectory="tools/phpunit.d" > </phpunit>
Usage
Include the Zalas\PHPUnit\Doubles\TestCase\ProphecyTestDoubles
or Zalas\PHPUnit\Doubles\TestCase\PHPUnitTestDoubles
trait to have your test doubles initialised in one of the supported test doubling frameworks.
Both the type of test double and the kind of test doubling framework are taken from the property type:
/** * @var Vimes|ObjectProphecy */ private $vimes;
Currently, two test doubling frameworks are supported:
- Prophecy -
Prophecy\Prophecy\ObjectProphecy
type hint - PHPUnit -
PHPUnit\Framework\MockObject\MockObject
type hint
Prophecy
<?php use PHPUnit\Framework\TestCase; use Prophecy\Prophecy\ObjectProphecy; use Zalas\PHPUnit\Doubles\TestCase\ProphecyTestDoubles; class DiscworldTest extends TestCase { use ProphecyTestDoubles; /** * @var Vimes|ObjectProphecy */ private $vimes; /** * @var Nobby|Fred|ObjectProphecy */ private $nobbyAndFred; public function test_it_hires_new_recruits_for_nightwatch() { $discworld = new Discworld($this->vimes->reveal(), $this->nobbyAndFred->reveal()); $discworld->createNightWatch(); $this->vimes->recruit($this->nobbyAndFred)->shouldHaveBeenCalled(); } }
PHPUnit
<?php use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Zalas\PHPUnit\Doubles\TestCase\PHPUnitTestDoubles; class DiscworldTest extends TestCase { use PHPUnitTestDoubles; /** * @var Vimes|MockObject */ private $vimes; /** * @var Nobby|MockObject */ private $nobbyAndFred; public function test_it_hires_new_recruits_for_nightwatch() { $discworld = new Discworld($this->vimes, $this->nobby); $this->vimes->expects($this->once()) ->method('recruit') ->with($this->nobby); $discworld->createNightWatch(); } }
Contributing
Please read the Contributing guide to learn about contributing to this project. Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.