У меня есть класс учения User, который имеет эту иерархию Doctrine_Record -> BaseUser -> User. В PHP Symfony вы знаете, что вы можете получить доступ к записи доктрины, используя методы доступа к массиву. У каждого класса есть @property и метод.
$user['mode'] == $user->getMode()
Когда я пишу тестовые случаи PHPUnit, я не могу смоделировать случаи, когда используется метод доступа к массиву.
Вот пример кода из модульного теста, а также фактический код -
User.php
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);
}
}
Это тест для него
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());
}
Я пытаюсь высмеивать вхождение $user['mode']
в коде. Что я делаю не так?
Я сослался на следующую ссылку и написал код выше.
PHPUnit - создание фиктивных объектов для использования в качестве заглушек для свойств