У меня есть следующий код для тестирования.Установить объект, заданный кодом в Mockery
// $generator, $locale, $site are parameters.
// It is just a part of real code.
$text = new Text();
$text->setType($generator->getType())
->setLocale($locale)
->setSite($site->getId());
/** @var $site \namespace\Site */
$site->addText($text);
Чтобы проверить это, я делаю макет сайта с использованием Mockery.
В тесте я вообще хочу сделать
$text = $site->getText();
$this->assertInstanceOF('\namespace\Text', $text);
$this->assertSame($generator->getType(), $text->getType());
$this->assertSame($locale, $text->getLocale());
$this->assertSame($site->getId(), $text->getSite());
Делая издеваться, я хочу издеваться, чтобы вернуть экземпляр текста, созданного оригинального кода и набора в строке $site->addText($site)
. Я попробовал
$text = new Text();
$site = Mockery::mock(Site::class)
->shouldReceive('addText')
->with($text)
->andReturnUsing(function() {
$args = func_get_args();
return $args[0];
})
->getMock();
Это возвращает меня объект текста, содержащийся в насмешливом коде. В издевательства, есть ли способ получить объект Text, созданный в исходном коде?
Спасибо @bram, у меня была бы аналогичная проблема, и решение, которое вы дали, кажется наилучшим образом подходит для моей проблемы. –