jervdesign / php-unit-mock
Base Class for creating reusable PHPUnit Mock Objects
This package's canonical repository appears to be gone and the package has been frozen as a result.
0.2.1
2016-03-18 21:33 UTC
Requires
- php: >=5.4
- phpunit/phpunit: >=4.8
This package is not auto-updated.
Last update: 2024-01-17 21:43:34 UTC
README
Base Class for creating reusable PHPUnit Mock Objects
- Allows for simple sharing of mocks (build them once)
- Allows simple array config for any mock return
- Mocks can follow class structure of your project
- src
-- MyPackage
--- MyClass
- mocks
-- MyPackage
--- MyClass
Example
Test Target
namespace MyPackage; class MyClass { public function myMethod() { return 'someValue' } }
Simple Mock Setup
Use this when your config is one-to-one with the mocks methods and results
namespace MyPackage; class MyClassMock extends \PhpUnitMock\Mock { /** * NameSpace and Name of the class to mock * * @var null */ protected $className = '\MyPackage\MyClass'; /** * Build the default mock configuration * * @return array */ public function buildDefaultConfig() { return [ 'myMethod' => 'SOME_TEST_VALUE' ]; } /** * @override to show proper type hinting in IDE * Build PHPUnit Mock in this method * * @return \MyPackage\MyClass */ public function buildMock() { return parent::buildMock(); } }
Custom Mock Setup
Use this when you require special cases for you mock results
namespace MyPackage; class MyClassMock extends \PhpUnitMock\Mock { /** * Build the default mock configuration * * @return array */ public function buildDefaultConfig() { return [ 'myMethod' => 'SOME_TEST_VALUE' ]; } /** * @override to show proper type hinting in IDE * Build PHPUnit Mock in this method * * @return \MyPackage\MyClass */ public function buildMock() { /** @var \MyPackage\MyClass $mock */ $mock = $this->testCase->getMockBuilder('\MyPackage\MyClass') ->disableOriginalConstructor() ->getMock(); $mock->method('myMethod') ->will($this->returnValue($this->config['myMethod'])); // Custom mock building here return $mock; } }
Simple Usage
namespace MyPackage; class MyClassTest extends \PHPUnit_Framework_TestCase { public function testMyMethod() { // Default Mock with default config $mock = MyClassMock::build($this); // Returns 'SOME_TEST_VALUE' from default config $mock->myMethod(); // Over-ride Mock return value $mock = MyClassMock::build( $this, // Add local config, this will be merged with the default config [ 'myMethod' => 'DIFFERENT_TEST_VALUE' ]; ); // Returns 'DIFFERENT_TEST_VALUE' from local config $mock->myMethod(); } }
Usage with Type Hints in IDE
namespace MyPackage; class MyClassTest extends \PHPUnit_Framework_TestCase { public function testMyMethod() { // Default Mock with default config $mock = MyClassMock::get($this)->buildMock(); // Returns 'SOME_TEST_VALUE' from default config $mock->myMethod(); // Over-ride Mock return value $mock = MyClassMock::get( $this, // Add local config, this will be merged with the default config [ 'myMethod' => 'DIFFERENT_TEST_VALUE' ]; )->buildMock(); // Returns 'DIFFERENT_TEST_VALUE' from local config $mock->myMethod(); } }