Permalink
Fetching contributors…
Cannot retrieve contributors at this time
201 lines (135 sloc) 5.02 KB
.. index::
    single: Quick Reference

Quick Reference

The purpose of this page is to give a quick and short overview of some of the most common Mockery features.

Do read the :doc:`../reference/index` to learn about all the Mockery features.

Integrate Mockery with PHPUnit, either by extending the MockeryTestCase:

use \Mockery\Adapter\Phpunit\MockeryTestCase;

class MyTest extends MockeryTestCase
{
}

or by using the MockeryPHPUnitIntegration trait:

use \PHPUnit\Framework\TestCase;
use \Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;

class MyTest extends TestCase
{
    use MockeryPHPUnitIntegration;
}

Creating a test double:

$testDouble = \Mockery::mock('MyClass');

Creating a test double that implements a certain interface:

$testDouble = \Mockery::mock('MyClass, MyInterface');

Expecting a method to be called on a test double:

$testDouble = \Mockery::mock('MyClass');
$testDouble->shouldReceive('foo');

Expecting a method to not be called on a test double:

$testDouble = \Mockery::mock('MyClass');
$testDouble->shouldNotReceive('foo');

Expecting a method to be called on a test double, once, with a certain argument, and to return a value:

$mock = \Mockery::mock('MyClass');
$mock->shouldReceive('foo')
    ->once()
    ->with($arg)
    ->andReturn($returnValue);

Expecting a method to be called on a test double and to return a different value for each successive call:

$mock = \Mockery::mock('MyClass');
$mock->shouldReceive('foo')
    ->andReturn(1, 2, 3);

$mock->foo(); // int(1);
$mock->foo(); // int(2);
$mock->foo(); // int(3);
$mock->foo(); // int(3);

Creating a runtime partial test double:

$mock = \Mockery::mock('MyClass')->makePartial();

Creating a spy:

$spy = \Mockery::spy('MyClass');

Expecting that a spy should have received a method call:

$spy = \Mockery::spy('MyClass');

$spy->foo();

$spy->shouldHaveReceived()->foo();

Not so simple examples

Creating a mock object to return a sequence of values from a set of method calls:

use \Mockery\Adapter\Phpunit\MockeryTestCase;

class SimpleTest extends MockeryTestCase
{
    public function testSimpleMock()
    {
        $mock = \Mockery::mock(array('pi' => 3.1416, 'e' => 2.71));
        $this->assertEquals(3.1416, $mock->pi());
        $this->assertEquals(2.71, $mock->e());
    }
}

Creating a mock object which returns a self-chaining Undefined object for a method call:

use \Mockery\Adapter\Phpunit\MockeryTestCase;

class UndefinedTest extends MockeryTestCase
{
    public function testUndefinedValues()
    {
        $mock = \Mockery::mock('mymock');
        $mock->shouldReceive('divideBy')->with(0)->andReturnUndefined();
        $this->assertTrue($mock->divideBy(0) instanceof \Mockery\Undefined);
    }
}

Creating a mock object with multiple query calls and a single update call:

use \Mockery\Adapter\Phpunit\MockeryTestCase;

class DbTest extends MockeryTestCase
{
    public function testDbAdapter()
    {
        $mock = \Mockery::mock('db');
        $mock->shouldReceive('query')->andReturn(1, 2, 3);
        $mock->shouldReceive('update')->with(5)->andReturn(NULL)->once();

        // ... test code here using the mock
    }
}

Expecting all queries to be executed before any updates:

use \Mockery\Adapter\Phpunit\MockeryTestCase;

class DbTest extends MockeryTestCase
{
    public function testQueryAndUpdateOrder()
    {
        $mock = \Mockery::mock('db');
        $mock->shouldReceive('query')->andReturn(1, 2, 3)->ordered();
        $mock->shouldReceive('update')->andReturn(NULL)->once()->ordered();

        // ... test code here using the mock
    }
}

Creating a mock object where all queries occur after startup, but before finish, and where queries are expected with several different params:

use \Mockery\Adapter\Phpunit\MockeryTestCase;

class DbTest extends MockeryTestCase
{
    public function testOrderedQueries()
    {
        $db = \Mockery::mock('db');
        $db->shouldReceive('startup')->once()->ordered();
        $db->shouldReceive('query')->with('CPWR')->andReturn(12.3)->once()->ordered('queries');
        $db->shouldReceive('query')->with('MSFT')->andReturn(10.0)->once()->ordered('queries');
        $db->shouldReceive('query')->with(\Mockery::pattern("/^....$/"))->andReturn(3.3)->atLeast()->once()->ordered('queries');
        $db->shouldReceive('finish')->once()->ordered();

        // ... test code here using the mock
    }
}