Платформа Phake: как клонировать объекты на captureAll?

\ 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
}

Ответ 1

Это невозможно с v2.x структуры. Соответствующий PR находится на рассмотрении, и будущие версии могут поддерживать такие возможности.