\ Phake:: captureAll возвращает массив параметров, используемых в последовательных вызовах. Он отлично работает со скалярами или когда передаются разные объекты, но не очень полезен при использовании одного и того же объекта. Часто бывает, что data mapper mocks, когда CUT изменяет и сохраняет объект несколько раз.
В следующем примере я пытаюсь утверждать, что первый $mock->fooWithArgument
был вызван с ожидаемыми аргументами, но не может найти способ сделать это:
public function testArgumentCapturingAllValls()
{
$mock = \Phake::mock('PhakeTest_MockedClass');
$obj1 = new \stdClass;
$obj1->bar = 1;
$mock->fooWithArgument($obj1);
$obj1->bar = 2;
$mock->fooWithArgument($obj1);
\Phake::verify($mock, \Phake::atLeast(1))->fooWithArgument(\Phake::captureAll($toArgument));
$this->assertEquals(1, $toArgument[0]->bar); //fails, as both elements point to the same instance
}