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