janmarek / mockista
Mockista is library for mocking, which I've written, because I find mocking in PHPUnit awful.
Installs: 217 599
Dependents: 48
Suggesters: 3
Security: 0
Stars: 29
Watchers: 10
Forks: 14
Open Issues: 6
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-11-09 14:14:24 UTC
README
Install via composer:
$ composer require --dev janmarek/mockista
It is recommended to create base test class with mockista functionality:
<?php abstract class BaseTestCase extends \PHPUnit_Framework_TestCase { /** @var \Mockista\Registry */ protected $mockista; protected function setUp() { $this->mockista = new \Mockista\Registry(); } protected function tearDown() { $this->mockista->assertExpectations(); } }
Quick Start
Basic syntax:
<?php class SomeTestCase extends BaseTestCase { private $mock1; private $mock2; protected function setUp() { parent::setUp(); $this->mock1 = $this->mockista->create(); $this->mock1->expects('method')->andReturn(5); $this->mock1->expects('method')->once()->with(1, 2, 3)->andReturn(4); // or you can use mock builder with nicer syntax $builder = $this->mockista->createBuilder(); $builder->method()->andReturn(5); $builder->method(1, 2, 3)->once->andReturn(4); $this->mock2 = $builder->getMock(); // you can create mock of existing class $this->mock3 = $this->mockista->create('ExistingClass', array( 'abc' => 1, // you can define return values easily 'def' => function ($a) { return $a * 2; } )); } public function testMock1() { $this->assertEquals(5, $this->mock1->method()); $this->assertEquals(5, $this->mock1->method('abc')); $this->assertEquals(4, $this->mock1->method(1, 2, 3)); } public function testMock2() { $this->assertEquals(5, $this->mock1->method()); $this->assertEquals(5, $this->mock1->method('abc')); $this->assertEquals(4, $this->mock1->method(1, 2, 3)); } public function testMock3() { $this->assertEquals(1, $this->mock1->abc()); $this->assertEquals(4, $this->mock1->def(2)); } }
Parameter matching
Parameters can be matched by value:
$mock->expects('method')->once()->with(1, 'abc', TRUE)->andReturn(4); $builder->method(1, 'abc', TRUE)->andReturn(4);
Or you can use smarter parameter matcher:
$mock->expects('method')->once()->with(Matchers::isInt(), Matchers::isString(), Matchers::isBool())->andReturn(4); $builder->method(Matchers::isInt(), Matchers::isString(), Matchers::isBool())->andReturn(4);
Available matchers are:
- Matchers::isBool()
- Matchers::isNumeric()
- Matchers::isInt()
- Matchers::isFloat()
- Matchers::isString()
- Matchers::isArray()
- Matchers::regexp($pattern) - check string parameter by regular expression
- Matchers::callback($callback) - check parameter by your custom logic passed in a callback