You can find more detailed examples by going here
Always teardown mockery
Please Note: Mockery evaluates expectations on its close()
method. For this reason, you should always have a tearDown()
method on your test that calls \Mockery::close()
. Otherwise, Mockery gives false positives.
protected function tearDown() {
\Mockery::close();
}
Simple Test Mock
$mock = \Mockery::mock('AClassToBeMocked');
$mock->shouldReceive('someMethod')->once();
Method 2x
$mockeryMock = \Mockery::mock('AnInexistentClass');
$mockeryMock->shouldReceive('someMethod')->twice();
Method 3x+
$mockeryMock = \Mockery::mock('AnInexistentClass');
$mockeryMock->shouldReceive('someMethod')->times(3);
Return Stuff in the mocked method
$mockeryMock = \Mockery::mock('AnInexistentClass');
$mockeryMock->shouldReceive('someMethod')
->once()
->andReturn($someValue);
Return Multiple Values
$mockeryMock = \Mockery::mock('AnInexistentClass');
$mockeryMock->shouldReceive('someMethod')
->andReturn($firstValue, $secondValue, $firstValue, $secondValue);
Passing Parameters and Return values spepcific to those parameters.
$mockeryMock = \Mockery::mock('AnInexistentClass');
$mockeryMock->shouldReceive('getNumber')->with(2)->andReturn(2);
$mockeryMock->shouldReceive('getNumber')->with(3)->andReturn(3);
Partial Mocks
$mockeryMock2 = \Mockery::mock('Calculator[add]');
$mockeryMock2->shouldReceive('add')->with(0,3)->andReturn(3);
$mock = \Mockery::mock('MyClass[foo,bar]');
Mock objects with chained methods
$mock->shouldReceive('indices->exists')->once()->andReturn('Your Mom');
Mock objects with multiple chained methods
# mocking indices->exists and indices->create
$mock->shouldReceive('indices->exists')->once()->andReturn(false)->shouldReceive('create')->andReturn(['acknowledged' => 1]);
Do not call constructor
$noConstrucCall = \Mockery::mock('Calculator[add]');
$noConstrucCall->shouldReceive('add')->andReturn($result);
Use constructor parameters
$withConstructParams = \Mockery::mock('Calculator[add]', array(1,2));
$withConstructParams->shouldReceive('add')->andReturn($result);
Use real object with real values and mock over it
$realCalculator = new Calculator(1,2);
$mockRealObj = \Mockery::mock($realCalculator);
$mockRealObj->shouldReceive('add')->andReturn($result);
Nth Modifiers
zeroOrMoreTimes()
once()
twice()
time(n)
never()
atLeast()->times(n)
atMost()->time(n)
between(min, max)
Arguments
with(1)
with(anything())
with(typeOf('string')) //float, array, etc
with('/^foo/')
with(identicalTo(2))
with(not(2))
with(anyOf(1,2))
with(\Mockery::notAnyOf(1, 2))
with(\Mockery::subset(array(0=>'foo')))
with(\Mockery::contains(value1, value2))
with(\Mockery::hasKey(key));
with(\Mockery::hasValue(value));
Detect Mock Objects
assert($mightBeMocked instanceof \Mockery\MockInterface);