<?php namespace AKlump\PHPUnit\Test\EasyMock; use AKlump\PHPUnit\EasyMock; use AKlump\PHPUnit\EasyMockTrait; use PHPUnit\Framework\TestCase;
The test class will have the following properties setted automatically $this->obj
and $this->args
to be used by your methods.
class ConstructorMockArgumentsUnitTest extends TestCase { use EasyMockTrait; protected function getSchema() { return [ 'classToBeTested' => "AKlump\PHPUnit\Test\EasyMock\Hotel", // These are the constructor arguments for Hotel, we are going to set up // india as a full mock, and juliette as a partial mock. // The order must match that of the constructor. 'classArgumentsMap' => [ 'india' => '\AKlump\PHPUnit\Test\EasyMock\India', 'juliette' => [ '\AKlump\PHPUnit\Test\EasyMock\Juliette', EasyMock::PARTIAL, ], ], ]; } /** * @expectedException \Mockery\Exception\BadMethodCallException */ public function testFullMockWithoutExpectationThrows() { $this->assertSame(India::class, $this->obj->getIndiaName()); } public function testFullMockWithExpectationReturnsExpectation() { $this->args->india->allows('getName')->andReturns('David'); $this->assertSame('David', $this->obj->getIndiaName()); } public function testPartialMockCallsDefinedMethod() { $this->assertSame(Juliette::class, $this->obj->getJulietteName()); } public function testPartialMockWithExpectationReturnsExpectation() { $this->args->juliette->allows('getName')->andReturns('Caesar'); $this->assertSame('Caesar', $this->obj->getJulietteName()); } public function testConstructor() { // Use this assertion to quickly make sure constructor works as expected. $this->assertConstructorSetsInternalProperties(); } }
class Hotel { protected $india, $juliette; public function __construct(India $india, Juliette $juliette) { $this->india = $india; $this->juliette = $juliette; } public function getIndiaName() { return $this->india->getName(); } public function getJulietteName() { return $this->juliette->getName(); } }
class India { public function getName() { return __CLASS__; } }
class Juliette { public function getName() { return __CLASS__; } }