Unit testing 如何模拟其他类实例,phpunit?
我有下面的代码。如何在不执行$video->run()的情况下对run函数进行单元测试强> 实际上,我怎样才能模仿$video->run()调用下面的代码?有可能吗Unit testing 如何模拟其他类实例,phpunit?,unit-testing,mocking,phpunit,Unit Testing,Mocking,Phpunit,我有下面的代码。如何在不执行$video->run()的情况下对run函数进行单元测试 实际上,我怎样才能模仿$video->run()调用下面的代码?有可能吗 class Runner { ... public function run() { $task = $this->getTask(); switch ( $task->getType() ) { case Task::TYPE_VIDEO:
class Runner
{
...
public function run()
{
$task = $this->getTask();
switch ( $task->getType() ) {
case Task::TYPE_VIDEO:
$video = new Video( $task );
$video->run();
return 1;
break;
default:
echo "Not implemented task runner";
return 9;
break;
}
}
}
简单的方法是在类中创建一个新方法 然后,您必须模拟getVideo并返回一个模拟的视频对象,然后才能在模拟的视频对象中模拟方法的运行 这不是最好的办法,但这是可能的
public function run()
{
$task = $this->getTask();
switch ($task->getType()) {
case Task::TYPE_VIDEO:
$this->getVideo($task)->run();
return 1;
break;
default:
echo "Not implemented task runner";
return 9;
break;
}
}
protected function getVideo($task)
{
return new Video($task);
}
您可以使用模拟$video->run()方法调用。首先,使用“实例模拟”为视频类创建模拟,如下所示:
$videoMock = Mockery::mock('overload:MyNamespace\Video');
这将在创建视频类的新实例时进行“拦截”,并使用$videoMock
。创建“$videoMock”时,只需为给定方法添加一个期望声明:
$videoMock->shouldReceive('run')->once();
可能会提供一些关于如何使用该框架的好信息。谢谢!看起来很有趣。我试试看。