Skip to content

Instantly share code, notes, and snippets.

@alairock
Forked from loonies/1_phpunit-api.md
Last active April 28, 2016 05:05
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alairock/8850067 to your computer and use it in GitHub Desktop.
Save alairock/8850067 to your computer and use it in GitHub Desktop.

PHPUnit API reference

  • version 3.6

TODO

Check those constraints:

$this->anything()
$this->contains($value)
$this->arrayHasKey($key)
$this->equalTo($value, $delta, $maxDepth)
$this->classHasAttribute($attribute)
$this->greaterThan($value)
$this->isInstanceOf($className)
$this->isType($type)
$this->matchesRegularExpression($pattern)
$this->stringContains($string, $case)

Assertions

TOC

String

  • assertRegExp
  • assertNotRegExp
  • assertStringMatchesFormat
  • assertStringNotMatchesFormat
  • assertStringStartsWith
  • assertStringStartsNotWith
  • assertStringEndsWith
  • assertStringEndsNotWith

TOC

Array primitive

  • assertArrayHasKey
  • assertArrayNotHasKey
  • assertContains
  • assertNotContains
  • assertContainsOnly
  • assertNotContainsOnly
  • assertCount
  • assertNotCount
  • assertSameSize
  • assertNotSameSize

TOC

Array class attribute

  • assertAttributeContains
  • assertAttributeNotContains
  • assertAttributeContainsOnly
  • assertAttributeNotContainsOnly
  • assertAttributeCount
  • assertAttributeNotCount

TOC

Variable primitive

  • assertTrue
  • assertFalse
  • assertNotNull
  • assertNull
  • assertSame
  • assertNotSame
  • assertEquals
  • assertNotEquals
  • assertEmpty
  • assertNotEmpty
  • assertGreaterThan
  • assertGreaterThanOrEqual
  • assertLessThan
  • assertLessThanOrEqual
  • assertInstanceOf
  • assertNotInstanceOf
  • assertInternalType
  • assertNotInternalType

TOC

Variable class attribute

  • assertAttributeSame
  • assertAttributeNotSame
  • assertAttributeEquals
  • assertAttributeNotEquals
  • assertAttributeEmpty
  • assertAttributeNotEmpty
  • assertAttributeGreaterThan
  • assertAttributeGreaterThanOrEqual
  • assertAttributeLessThan
  • assertAttributeLessThanOrEqual
  • assertAttributeInstanceOf
  • assertAttributeNotInstanceOf
  • assertAttributeInternalType
  • assertAttributeNotInternalType

TOC

Class structure

  • assertClassHasAttribute
  • assertClassNotHasAttribute
  • assertClassHasStaticAttribute
  • assertClassNotHasStaticAttribute
  • assertObjectHasAttribute
  • assertObjectNotHasAttribute

TOC

File

  • assertFileEquals
  • assertFileNotEquals
  • assertStringEqualsFile
  • assertStringNotEqualsFile
  • assertFileExists
  • assertFileNotExists

TOC

Xml

  • assertXmlFileEqualsXmlFile
  • assertXmlFileNotEqualsXmlFile
  • assertXmlStringEqualsXmlFile
  • assertXmlStringNotEqualsXmlFile
  • assertXmlStringEqualsXmlString
  • assertXmlStringNotEqualsXmlString
  • assertEqualXMLStructure

TOC

Other

  • assertStringMatchesFormatFile
  • assertStringNotMatchesFormatFile
  • assertSelectCount
  • assertSelectRegExp
  • assertSelectEquals
  • assertTag
  • assertNotTag
  • assertThat

TOC

Mocking

TOC

turn private methods into public methods for testing

$class = new ReflectionClass(get_class($this->curl));
$method = $class->getMethod('__checkCredentials');
$method->setAccessible(true);
$method->invokeArgs($this->curl, ['asdf']);

getMock()

Returns a mock object for the specified class.

  • param: ...
  • return: PHPUnit_Framework_MockObject_MockObject

PHPUnit_Framework_MockObject_MockObject getMock(string $originalClassName [, mixed $methods = array() [, array $arguments = array() [, string $mockClassName = '' [, bool $callOriginalConstructor = TRUE [, bool $callOriginalClone = TRUE [, bool $callAutoload = TRUE]]]]]])

$this->getMock(
	$originalClassName,
	$methods = array(),
	array $arguments = array(),
	$mockClassName = '',
	$callOriginalConstructor = TRUE,
	$callOriginalClone = TRUE,
	$callAutoload = TRUE
);

getMockForAbstractClass()

Returns a mock object for the specified abstract class with all abstract methods of the class mocked. Concrete methods to mock can be specified with the last parameter.

  • param: ...
  • return: PHPUnit_Framework_MockObject_MockObject

PHPUnit_Framework_MockObject_MockObject getMockForAbstractClass(string $originalClassName [, array $arguments = array() [, string $mockClassName = '' [, bool $callOriginalConstructor = TRUE [, bool $callOriginalClone = TRUE [, bool $callAutoload = TRUE [, array $mockedMethods = array()]]]]]])

$this->getMockForAbstractClass(
	$originalClassName,
	array $arguments = array(),
	$mockClassName = '',
	$callOriginalConstructor = TRUE,
	$callOriginalClone = TRUE,
	$callAutoload = TRUE,
	array $mockedMethods
);

getMockFromWsdl()

Returns a mock object based on the given WSDL file.

  • param: ...
  • return: PHPUnit_Framework_MockObject_MockObject

PHPUnit_Framework_MockObject_MockObject getMockFromWsdl(string $wsdlFile [, string $originalClassName [, string $mockClassName = '' [, array $mockedMethods = array() [, bool $callOriginalConstructor = TRUE]]]])

$this->getMockFromWsdl(
	$wsdlFile,
	$originalClassName = '',
	$mockClassName = '',
	array $methods = array(),
	$callOriginalConstructor = TRUE
);

getMockBuilder()

Returns a builder object to create mock objects using a fluent interface.

  • param: string
  • return: PHPUnit_Framework_MockObject_MockBuilder

PHPUnit_Framework_MockObject_MockBuilder getMockBuilder(string $className)

$mock = $this->getMockBuilder($className)
	->setMockClassName($name)
	->setConstructorArgs(array())
	->disableOriginalConstructor()
	->disableOriginalClone()
	->disableAutoload()
	->setMethods(array()|NULL)
	->getMock();
	
$mock = $this->getMockBuilder($className)
	->setMockClassName($name)
	->setConstructorArgs(array())
	->disableOriginalConstructor()
	->disableOriginalClone()
	->disableAutoload()
	->setMethods(array()|NULL)
	->getMockForAbstractClass();

Setting up the expectations

Matchers

$mock->expects($this->matcher())

any()

Returns a matcher that matches when the method it is evaluated for is executed zero or more times.

  • return: PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount

PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount any()

never()

Returns a matcher that matches when the method it is evaluated for is never executed.

  • return: PHPUnit_Framework_MockObject_Matcher_InvokedCount

PHPUnit_Framework_MockObject_Matcher_InvokedCount never()

atLeastOnce()

Returns a matcher that matches when the method it is evaluated for is executed at least once.

  • return: PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce

PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce atLeastOnce()

once()

Returns a matcher that matches when the method it is evaluated for is executed exactly once.

  • return: PHPUnit_Framework_MockObject_Matcher_InvokedCount

PHPUnit_Framework_MockObject_Matcher_InvokedCount once()

exactly()

Returns a matcher that matches when the method it is evaluated for is executed exactly once.

  • param: int
  • return: PHPUnit_Framework_MockObject_Matcher_InvokedCount

PHPUnit_Framework_MockObject_Matcher_InvokedCount exactly(int $count)

at()

Returns a matcher that matches when the method it is evaluated for is invoked at the given $index.

  • param: int
  • return: PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex

PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex at(int $index)

Constraints

$mock->with($this->constraint())

equalTo()

logicalAnd()

logicalNot()

logicalOr()

logicalXor()

Returns

$mock->will($this->return())

returnValue()

Desc.

PHPUnit_Framework_MockObject_Stub_Return returnValue(mixed $value)

returnValueMap()

Desc.

PHPUnit_Framework_MockObject_Stub_ReturnValue MapreturnValueMap(array $valueMap)

returnArgument()

PHPUnit_Framework_MockObject_Stub_ReturnArgument returnArgument(int $argumentIndex)

returnCallback()

Desc.

PHPUnit_Framework_MockObject_Stub_ReturnCallback returnCallback(mixed $callback)

returnSelf()

Returns the current object.

PHPUnit_Framework_MockObject_Stub_ReturnSelf returnSelf()

throwException()

Desc.

PHPUnit_Framework_MockObject_Stub_Exception throwException(Exception $exception)

onConsecutiveCalls()

Desc.

PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls onConsecutiveCalls(mixed ... [, mixed ...])

Mockery

Better Examples.

You can find more detailed examples by going here

Notes

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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment