0
嘲笑聲稱模擬對象應該返回某個類實例嗎?一個被吸引的對象應該如何實現這一點?嘲笑如何斷言類實例
比方說,我正在使用一個模擬的實體管理器+庫,它會返回一個模擬的MyClass對象。
我正在使用存儲庫測試一個應該返回一個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()));
這太棒了,我不知道。除了默認指南外,你是否碰巧有更多資源嘲笑?我在網上找到了相當缺乏的信息 – Stormsson 2014-11-21 15:34:50
是的,它擴展了原來的課程,以便它繼續在相同的地方工作,例如,在[類型提示](http://php.net/manual/en/language.oop5.typehinting.php)中。不幸的是,除[主文檔](http://docs.mockery.io/en/latest/)之外,我不知道任何好的資源。 – dchesterton 2014-11-21 16:28:18