Настройка нескольких методов в объектах PHPUnit mock

Я пытаюсь создать макет объекта в 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);

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

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

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

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

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

1 ответов


у меня нет никакого опыта работы с PHPUnit, но мое предположение было бы примерно так:

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

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


Edit:

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

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

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

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()));