Есть ли способ насмешки утверждать, что издевавшийся объект должен возвращать определенный экземпляр класса? как должен достичь этого эффект?
скажем, я использую издеваемую сущность-менеджер + репозиторий, который возвращает насмешливый объект 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()));
Поскольку MockedMyClass расширяет MyClass, вы можете проверить, что возвращаемый объект является экземпляром MyClass, используя assertInstanceOf
.
$this->assertInstanceOf('MyClass', $worker->doMethodThatShouldReturnaMyClassInstance());