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

FMa*_*008 5 phpunit mocking expectations

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

例如,我想测试mock将display()调用该方法并返回NULL.我还想测试一下这个方法process()是否会被调用.

事实上,我的测试被称为testProcessIsCalledIfDisplayReturnNull().

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

Dmi*_*val 7

如果你知道,在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'));
Run Code Online (Sandbox Code Playgroud)


FMa*_*008 6

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

$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');
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用`once()`而不是`exact(1)`.请记住,这不会在两个期望之间产生排序,但通常足够好.如果需要特定的顺序,请使用`at($ index)`. (4认同)