【发布时间】:2016-08-14 11:20:45
【问题描述】:
我有以下要测试的代码。
// $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 对象。在嘲笑中,有什么方法可以让我在原始代码中创建 Text 对象?
【问题讨论】: