Search code examples
phpunit-testingtddmockingphpunit

PHPUnit: expects method meaning


When I create a new mock I need to call the expects method. What exactly it does? What about its arguments?

$todoListMock = $this->getMock('\Model\Todo_List');
        $todoListMock->expects($this->any())
            ->method('getItems')
            ->will($this->returnValue(array($itemMock)));

I can't find the reason anywhere (I've tried docs). I've read the sources but I can't understand it.


Solution

  • expects() - Sets how many times you expect a method to be called:

    $mock = $this->getMock('nameOfTheClass', array('firstMethod','secondMethod','thirdMethod'));
    $mock->expects($this->once())
         ->method('firstMethod')
         ->will($this->returnValue('value'));
    $mock->expects($this->once())
         ->method('secondMethod')
         ->will($this->returnValue('value'));
    $mock->expects($this->once())
         ->method('thirdMethod')
         ->will($this->returnValue('value'));
    

    If you know, that method is called once use $this->once() in expects(), otherwise use $this->any()

    see:
    PHPUnit mock with multiple expects() calls

    https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs

    http://www.slideshare.net/mjlivelyjr/advanced-phpunit-testing