【发布时间】:2011-07-19 17:40:01
【问题描述】:
仍在测试映射器类的过程中,我需要模拟 PDO。 但是现在我遇到了一个无限循环的问题:
$arrResult = array(
array('id'=>10, 'name'=>'abc'),
array('id'=>11, 'name'=>'def'),
array('id'=>12, 'name'=>'ghi')
);
$STMTstub->expects($this->any())
->method('fetch')
->will($this->returnValue($arrResult));
$PDOstub = $this->getMock('mockPDO');
$PDOstub->expects($this->any())
->method('prepare')
->will($this->returnValue($STMTstub));
当然,在测试 1 fetch 或 fetchAll 时,该代码是完美的。但是当涉及到多次获取时,就会发生无限循环。就像在那种情况下:
while($arr = $stmt->fetch()){
//...
}
所以我希望 fetch() 循环遍历所有 $arrResult 并一一返回子数组以模拟真正的 fetch() 行为。我可以“挂钩一个功能”吗?
【问题讨论】:
-
我认为要走的路是 onConsecutiveCall()。 (见:phpunit.de/manual/current/en/…)