PHPUnit mock with multiple expects() calls

家住魔仙堡 提交于 2019-12-01 03:44:13

问题


Using PHPUnit, I wonder how we can have multiple expectation from the same stub/mock.

For example, I want to test that the mock will have the method display() called and return NULL. I also want to test that the method process() will be called.

In fact my test is called testProcessIsCalledIfDisplayReturnNull().

So I need to setup 2 expectations on the same mock object, and the manual doesn't really help about that :(


回答1:


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

$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'));



回答2:


I've tried this, and it seems to works as long as the call order stays good:

$mock = $this->getMock('mockWorker', array('display', 'process'));
$mock->expects($this->exactly(1))
     ->method('display')
     ->will($this->returnValue(null));
$mock->expects($this->exactly(1))
     ->method('process');


来源:https://stackoverflow.com/questions/5834416/phpunit-mock-with-multiple-expects-calls

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!