PHPUnit Doubles
, (*1)
Initialises test doubles in PHPUnit test cases for you., (*2)
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., (*3)
Put the extension in your PHPUnit extensions directory.
Remember to instruct PHPUnit to load extensions in your phpunit.xml
:, (*4)
<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., (*5)
Both the type of test double and the kind of test doubling framework are taken from the property type:, (*6)
/**
* @var Vimes|ObjectProphecy
*/
private $vimes;
Currently, two test doubling frameworks are supported:, (*7)
-
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., (*8)