2011-01-13 3 views
1

エンティティの読み込みと作成を担当するEntityManagerを持つサービスクラス - クラスのunittestを作成しようとしています。Doctine2 Unittestはエンティティ関係をモックアップします

問題は、エンティティを作成し、必要なすべての関連エンティティを設定するエンティティのin :: create(配列)メソッドです。それがトリガー

<?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; 
} 
?> 

新しい実体が設定されていなかった関係を通じて発見された。だから私は、このためにモックオブジェクトを使用することをお勧めだろうと思ったが、私は次のコード(How to create a mock object of a doctrine entity?もここで見て)を使用する場合カスケードに使用

操作を持続:テストで

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

をトリガー:クラスMock_Role_c64eda12が有効なエンティティまたはマップされたスーパークラスではありません。

この問題を解決するにはどうすればよいですか? (どちらがもっとここに適用されているのかわかりません...サービス全体が作成して永続する場合、または悪い考えであれば教えてください)

ありがとう!

答えて

2

ここでロールをモックしたくない場合は、EntityManagerをモックする必要があります。機能テスト中のエンティティマネージャをモックしたくない場合は、実際のRoleオブジェクトを操作することもできます。

関連する問題