Как предотвратить ошибки переопределения при использовании классов Mock, которые реализуют интерфейс IteratorAggregate при тестировании с PHPUnit? - PullRequest
3 голосов
/ 24 февраля 2011

Я пишу модульный тест, который опирается на внешний класс, exceptionManager. Я хочу быть в состоянии предсказать, что будут возвращать некоторые конкретные функции в этом классе, поэтому я использую фиктивный объект. Код довольно прост:

$mockExceptionManager = $this->getMock('exceptionManager');

Проблема в том, что мой менеджер исключений реализует интерфейс IteratorAggregate, для которого требуется метод, который выглядит следующим образом:

public function getIterator()
{
  return new ArrayIterator($this->exceptions);
}

Когда я запускаю модульный тест, я получаю следующую ошибку:

Неустранимая ошибка: невозможно переопределить Mock_exceptionManager_ae79bad2 :: getIterator () в /Applications/MAMP/bin/php5.2/lib/php/PEAR/PHPUnit/Framework/MockObject/Generator.php(170) dval () код в строке 297

У меня такое ощущение, что набор фиктивных объектов PHPUnit также реализует интерфейс IteratorAggregate, и эти два конфликтуют, хотя я не уверен. Я также попытался использовать интерфейс Iterator, но столкнулся с той же проблемой. Как я могу обойти это?

1 Ответ

7 голосов
/ 24 февраля 2011

Я отключил автозагрузку на фиктивном объекте, что решило проблему.

$mockExceptionManager = $this->getMockBuilder('exceptionManager')
                             ->disableAutoload()
                             ->getMock();
...