Understanding PHPunit expectations
A mock object most of the time will contain an expectation like
$lock->expects($this->at(0))
->method('acquire')
->with($lock_name, 30)
->will($this->returnValue(TRUE));
expects() accepts matchers (be mindful of the note as well below the table). method accepts constraints.
When a method call happens, every expectation checks whether it matches. It only uses the matches and constraints above. It does not use the arguments passed into with. That is only used to verify whether the behavior is the correct one. If there is a match and verification also passed then comes the invocation part as prescribed in will.
While $this->returnValue is one of the most common, it is not always enough. We might want to write a single expectation that matches every call of a method and then we likely need something more than just returning a constant value. The PHPUnit manual has excellent examples of these:
- it can return values in the specified order
- it can return values from a map. To clarify, each map element is a list of arguments plus the return value. On every call, every such element is considered in order by strictly (
===) comparing the list of arguments to the actual method call arguments and if there is a match then the last element is returned immediately. - it can use a callback. This is the most versatile and closures can be used very effectively here.
Help improve this page
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion
Still on Drupal 7? Security support for Drupal 7 ended on 5 January 2025. Please visit our Drupal 7 End of Life resources page to review all of your options.