【问题标题】:Doctrine2 Unittest mock up entity in relationshipDoctrine2 Unittest 在关系中模拟实体
【发布时间】: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


    【解决方案1】:

    你不想在这里模拟角色,你想模拟 EntityManager。如果您不想在功能测试中模拟实体管理器,在这种情况下您也可以使用真实的 Role 对象。

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2019-05-14
      相关资源
      最近更新 更多