我正在尝试创建一个服务类的unittest - 注入了EntityManager的类,负责加载和创建实体。
问题在于:: create(array)方法,用于创建实体并设置所有必需相关实体的实体。所以我认为最好使用模拟对象,但是当我使用下面的代码时(也可以在这里看到:How to create a mock object of a doctrine entity?)
<?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不是有效实体或映射超类。
我如何解决这个问题或者我可以使用哪种更好的方法? (不知道哪一个更适用于此......如果整个'服务创造并持续存在'或其他任何不好的想法请告诉我)
答案 0 :(得分:2)
你不想在这里模拟角色,你想要模拟EntityManager。如果您不想模拟实体管理器,那么您正在进行功能测试,在这种情况下,您还可以使用真正的Role对象。