gpt4 book ai didi

php - mock 如何断言类实例

转载 作者:行者123 更新时间:2023-11-28 21:29:46 25 4
gpt4 key购买 nike

有没有一种方法可以通过模拟来断言模拟对象应该返回某个类实例?一个 moked 对象应该如何实现这一点?

假设我正在使用一个模拟的实体管理器 + 存储库,它返回一个模拟的 MyClass 对象。

我正在使用存储库对工作类进行单元测试,该工作类应返回 MyClass 实例(显然不是模拟的 Myclass)。

问题是,当我注入(inject)模拟实体管理器 + 存储库时,在工作人员内部它正在使用 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()));

最佳答案

由于 MockedMyClass 扩展了 MyClass,您可以使用 assertInstanceOf 检查返回的对象是否是 MyClass 的实例。

$this->assertInstanceOf('MyClass', $worker->doMethodThatShouldReturnaMyClassInstance());

关于php - mock 如何断言类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com