带有多个expected()调用的PHPUnit mock

时间:2011-04-29 16:02:29

标签: mocking phpunit expectations

使用PHPUnit,我想知道如何从同一个存根/模拟中获得多个期望。

例如,我想测试mock将调用方法display()并返回NULL。我还想测试将调用方法process()

实际上,我的测试称为testProcessIsCalledIfDisplayReturnNull()

所以我需要在同一个模拟对象上设置2个期望值,而手册并没有真正帮助:(

2 个答案:

答案 0 :(得分:6)

如果你知道,在expect()中使用$ this-> once()一次调用该方法,否则使用$ 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'));

答案 1 :(得分:5)

我已经尝试了这个,只要通话顺序保持良好,它似乎有效:

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