Издевательство, как утверждать экземпляр класса

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()));
Теги:
testing
mockery

1 ответ

1
Лучший ответ

Поскольку MockedMyClass расширяет MyClass, вы можете проверить, что возвращаемый объект является экземпляром MyClass, используя assertInstanceOf.

$this->assertInstanceOf('MyClass', $worker->doMethodThatShouldReturnaMyClassInstance());
  • 0
    Это фантастика, я этого не знал. у вас есть больше ресурсов на издевательства, кроме руководства по умолчанию? я нахожу довольно нехватку информации онлайн
  • 1
    Да, он расширяет исходный класс, так что он будет продолжать работать в тех же местах, например, в подсказках типов . К сожалению, я не знаю ни одного хорошего ресурса, кроме основной документации .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню