2011-12-10 4 views
2

私はこの階層のDoctrineクラスUserを持っています。Doctrine_Record - > BaseUser - > Userです。 PHP symfonyでは、配列アクセサーと同様にメソッドを使ってdoctrineレコードにアクセスすることができます。各クラスには@propertyとメソッドがあります。私はPHPUnitのテストケースを書いていたときDoctrine_Recordクラスのサブクラスを模倣し、そのプロパティをスタブする方法は?

$user['mode'] == $user->getMode() 

、私は配列のアクセサメソッドが使用されている出来事を模擬することができません。

これはそれ

UserTest.php

public function testOnlyInactiveUsersAreRemoved() 
    { 
    $userGroup = new UserGroup(); 
    $user_1 = $this->getMock('User'); 
    $user_2 = $this->getMock('User'); 
    $user_1->expects($this->at(0))->method('__get')->with($this->equalTo('mode'))->will($this->returnValue(1)); 
    $user_2->expects($this->at(0))->method('__get')->with($this->equalTo('mode'))->will($this->returnValue(0)); 
    $userGroup->adduser($user_1); 
    $userGroup->adduser($user_2); 
    $userGroup->clearInactiveUsers(); 
    $this->assertCount(1, $userGroup->getUsers()); 
    } 
ための試験である
class User extends BaseUser { 
public function clearInactiveUsers() 
    { 
    foreach ($this->users as $user) { 
     if (!$user['mode']) { 
     unset($this->users[array_search($user, $this->users)]); 
     $user->delete(); 
     } 
    } 
    unset($user); 
    } 
} 

User.php

- ここ

は、ユニットテストからのサンプルコードだけでなく、実際のコードであります

私はコード内で発生$user['mode']を模擬しようとしています。私が間違っていることは何ですか?

私は以下のリンクを参照し、上記のコードを書いています。

PHPUnit - creating Mock objects to act as stubs for properties

答えて

2

あなたは彼らの期待を設定する前にメソッドを模擬するためにはPHPUnitを指示する必要があります。また、配列アクセスを介してmodeにアクセスしています。プロパティアクセスではありません。 BaseUserArrayAccessを実装していますか? __getの代わりにoffsetGetを嘲笑してください。

$user_1 = $this->getMock('User', array('offsetGet')); 
$user_2 = $this->getMock('User', array('offsetGet')); 
$user_1->expects($this->at(0))->method('offsetGet')->with($this->equalTo('mode'))->will($this->returnValue(1)); 
$user_2->expects($this->at(0))->method('offsetGet')->with($this->equalTo('mode'))->will($this->returnValue(0)); 
+0

私は自分のコードを編集しました。 Userクラスのコードも上に貼り付けられます。 –

+0

@dharmapurikar - 更新内容に基づいて回答を更新しました。 –

関連する問題