【发布时间】:2011-06-08 13:37:16
【问题描述】:
我正在尝试创建服务类的单元测试 - 注入了 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);
在测试触发器中:Class Mock_Role_c64eda12 不是有效的实体或映射的超类。
我该如何解决这个问题,或者我可以使用什么更好的方法? (不知道哪个更适用于此...如果整个“服务创建并保留实体”或其他任何不好的主意,请告诉我)
【问题讨论】:
标签: php unit-testing mocking doctrine-orm