\ Phake :: captureAll возвращает массив параметров, используемых в последовательных вызовах.
Он отлично работает со скалярами или когда передаются разные объекты, но не очень полезен, когда используется один и тот же объект. Это случается довольно часто для картограф данных издевается, когда 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
}
Это невозможно с v2.x фреймворка. Соответствующий пиар находится на рассмотрении, и будущие версии могут поддерживать такие варианты использования.
Других решений пока нет …