当我创建一个新模拟时,我需要调用expected方法。到底是做什么的?它的论点怎么样?
$todoListMock = $this->getMock('\Model\Todo_List');
$todoListMock->expects($this->any())
->method('getItems')
->will($this->returnValue(array($itemMock)));
我无法在任何地方找到原因(我已经尝试过文档)。我已经阅读了这些消息来源,但我无法理解。感谢。
答案 0 :(得分:48)
expected() - 设置您希望调用方法的次数:
$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'));
如果你知道,在expect()中使用$ this-> once()一次调用该方法,否则使用$ this-> any()
见:
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
答案 1 :(得分:45)
查看源代码会告诉您:
/**
* Registers a new expectation in the mock object and returns the match
* object which can be infused with further details.
*
* @param PHPUnit_Framework_MockObject_Matcher_Invocation $matcher
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
*/
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher);
PHPUnit手册列出了
中可用的Matchers
- any()返回一个匹配器,当匹配它的方法被执行零次或多次时匹配。
- never()返回一个匹配器,当匹配它的方法从未执行时匹配。
- atLeastOnce()会返回一个匹配器,该匹配器在评估它的方法至少执行一次时匹配。
- once()会返回一个匹配器,当匹配它的方法只执行一次时匹配。
- exact(int $ count)返回一个匹配器,当匹配它的方法执行完全$ count次时匹配。
- at(int $ index)返回一个匹配器,该匹配器在给定的$ index处调用它所评估的方法时匹配。