Для базового использования, что-то вроде этого будет работать. PHPUnit делает немного магии за кулисами. Если вы кешируете фиктивный объект, он не будет повторно объявлен. Просто создайте новую копию из этого кэшированного экземпляра, и все будет хорошо.
<?php
protected function setUp() {
parent::setUp();
static $soapStub = null; // cache the mock object here (or anywhere else)
if ($soapStub === null)
$soapStub = $this->getMockFromWsdl('service.wsdl');
$this->client = new Client;
$this->client->setClient(clone $soapStub); // clone creates a new copy
}
?>
В качестве альтернативы, вы, возможно, можете кэшировать имя класса с помощью get_class
и затем создать новый экземпляр, а не копию. Я не уверен, сколько "волшебного" PHPUnit делает для инициализации, но это стоит попробовать.
<?php
protected function setUp() {
parent::setUp();
static $soapStubClass = null; // cache the mock object class' name
if ($soapStubClass === null)
$soapStubClass = get_class($this->getMockFromWsdl('service.wsdl'));
$this->client = new Client;
$this->client->setClient(new $soapStubClass);
}
?>