有没有办法嘲笑断言模拟对象应该返回某个类实例?一个被嘲笑的对象应该如何实现呢?
让我们说我正在使用一个模拟的实体管理器+存储库,它返回一个模拟的MyClass对象。
我正在测试一个worker类,它应该使用存储库返回一个MyClass实例(显然不是一个模拟的Myclass)。
问题是,当我注入模拟的实体管理器+存储库时,在工作者内部它正在使用MockedMyClass实例,当存储库"从db"获取东西时,它返回MockedMyclass对象,只是因为模拟的存储库返回一个模拟对象。
我应该如何创建这样的测试? 作为参考,这是我如何创建模拟对象
protected function getMockEM($empty = self::REPO_NOT_EMPTY)
{
$emMock = M::mock('Doctrine\ORM\EntityManager', array(
'persist' => null,
'remove' => null,
'flush' => null,
'getRepository' => $this->getMockRepository($empty)
));
return $emMock;
}
public function getMockMyClass()
{
$pnMock = M::mock('MyNamespace\MyClass', array(
'getUser' => $this->getMockUser(),
'getSchedule' => $this->getMockSchedule($this->getDefaultStartingScheduleTime()),
'getStartingTime' => $this->getDefaultStartingScheduleTime(),
'getNotificationTime' => $this->getDefaultStartingScheduleTime()->modify("- ".$this->getDefaultNotificationTime()." minutes")
));
return $pnMock;
}
public function getMockRepository($empty = self::REPO_NOT_EMPTY)
{
if ($empty) {
$repoMock = M::mock('Doctrine\ORM\EntityRepository', array(
'findOneBy' => null
));
} else {
$repoMock = M::mock('Doctrine\ORM\EntityRepository', array(
'findOneBy' => $this->getMockMyClass()
));
}
return $repoMock;
}
....
$this->assertSame('MyClass',get_class($worker->doMethodThatShouldReturnaMyClassInstance()));
答案 0 :(得分:1)
当MockedMyClass扩展MyClass时,您可以使用assertInstanceOf
检查返回的对象是否是MyClass的实例。
$this->assertInstanceOf('MyClass', $worker->doMethodThatShouldReturnaMyClassInstance());