Doctrine2 Unittest макет сущности в отношениях - PullRequest
1 голос
/ 13 января 2011

Я пытаюсь создать юнит-тест класса обслуживания - класс, в который введен EntityManager и который отвечает за загрузку и создание сущностей.

Проблема в методе :: create (array) для сущностей, который создает сущности и устанавливает все необходимые связанные сущности. Поэтому я подумал, что было бы целесообразно использовать для этого фиктивный объект, но когда я использую следующий код (также здесь можно увидеть: Как создать фиктивный объект из сущности доктрины? )

<?php
public function testCreate($email, $password)
{
    $role = $this->getMock('Role');
    $this->service->create(
        array('email' => $email,
              'password' => $password,
              'role' => $role));
}

// service (simplified)
public function create(array $values)
{
    $user = new User();
    $user->setEmail($values['email'])
        ->setPassword($values['password'])
        ->setRole($values['role']);

    $this->getDatabaseManager()->persist($user)->flush();

    return $user;
}
?>

Это вызывает: Новый объект был найден в связи, которая не была настроена для каскадного сохранения операций

Использование:

$this->service->getDatabaseManager()->persist($role);

в триггерах теста: Класс Mock_Role_c64eda12 не является допустимым объектом или сопоставленным суперклассом.

Как я могу это исправить или какой лучший подход я могу использовать? (не знаю, какое из них применимо здесь больше ... если вся «служба создает и сохраняет энтиты» или что-то еще является плохой идеей, пожалуйста, дайте мне знать)

1 Ответ

2 голосов
/ 13 января 2011

Вы не хотите издеваться над ролью здесь, вы хотите издеваться над EntityManager. Если вы не хотите издеваться над менеджером сущностей, вы находитесь в функциональном тесте, в этом случае вы также можете работать с реальным объектом Role.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...