Настройка нескольких методов в фиктивных объектах PHPUnit - PullRequest
6 голосов
/ 13 ноября 2009

Я пытаюсь создать фиктивный объект в PHP и PHPUnit. Пока у меня есть это:

$object = $this->getMock('object',
                         array('set_properties',
                               'get_events'),
                         array(),
                         'object_test',
                         null);

$object
    ->expects($this->once())
    ->method('get_events')
    ->will($this->returnValue(array()));

$mo = new multiple_object($object);

Игнорируя мои ужасно неоднозначные имена объектов на минуту, я понимаю, что я сделал
- Создан фиктивный объект с двумя способами настройки
- Настроил метод get_events для возврата пустого массива и
- бросил макет в конструктор.

Что я хотел бы сейчас сделать, так это настроить второй метод, но я не могу найти ничего, объясняющего, как это сделать. Я хочу сделать что-то вроде

$object
    ->expects($this->once())
    ->method('get_events')
    ->will($this->returnValue(array()))
    ->expects($this->once())
    ->method('set_properties')
    ->with($this->equalTo(array()))

или что-то подобное, но это не работает. Как мне это сделать?

Тангенциально, означает ли это, что я плохо структурировал свой код, если мне нужно настроить более одного метода для тестирования?

1 Ответ

11 голосов
/ 13 ноября 2009

У меня нет опыта работы с PHPUnit, но я думаю, что-то вроде этого:

$object
  ->expects($this->once())
  ->method('get_events')
  ->will($this->returnValue(array()));
$object
  ->expects($this->once())
  ->method('set_properties')
  ->with($this->equalTo(array()));

Вы уже пробовали это?


Edit:

Хорошо, выполнив поиск по коду, я нашел несколько примеров, которые могут вам помочь

Проверьте это пример

Они используют это так:

public function testMailForUidOrMail()
{
    $ldap = $this->getMock('Horde_Kolab_Server_ldap', array('_getAttributes',
                                                            '_search', '_count',
                                                            '_firstEntry'));
    $ldap->expects($this->any())
        ->method('_getAttributes')
        ->will($this->returnValue(array (
                                      'mail' =>
                                      array (
                                          'count' => 1,
                                          0 => 'wrobel@example.org',
                                      ),
                                      0 => 'mail',
                                      'count' => 1)));
    $ldap->expects($this->any())
        ->method('_search')
        ->will($this->returnValue('cn=Gunnar Wrobel,dc=example,dc=org'));
    $ldap->expects($this->any())
        ->method('_count')
        ->will($this->returnValue(1));
    $ldap->expects($this->any())
        ->method('_firstEntry')
        ->will($this->returnValue(1));
(...)
}

Может быть, ваша проблема в другом месте?

Дайте мне знать, помогло ли это.


Edit2:

Можете ли вы попробовать это:

$object = $this->getMock('object', array('set_properties','get_events'));

$object
  ->expects($this->once())
  ->method('get_events')
  ->will($this->returnValue(array()));
$object
  ->expects($this->once())
  ->method('set_properties')
  ->with($this->equalTo(array()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...