phpunit не распознает использование count ()

У меня есть объект PHP, который реализует встроенный интерфейс Countable. Затем я высмеиваю этот объект для юнит-теста:

    $mapper = $this->getMockBuilder("Search_Model_Mapper_Search")
->disableOriginalConstructor()
->setMethods(array("find", "count"))
->getMock();
$mapper->expects($this->once())
->method("find")
->with(array("body" => "kajsgfkblkjasfgdjkb"))
->will($this->returnValue($mapper));
$mapper->expects($this->once())
->method("count")
->will($this->returnValue(0));

И тестируемый фрагмент кода выглядит так:

    $results = $this->getMapper("fulltext")->find(array("body" => $requestParams['q']));
if (count($results) === 0) {
$this->view->messages[] = "Sorry, no results were found. Please check your search terms and try again";
return;
}

PHPUnit 4.0.17 не распознает использование count () — я должен использовать $results->count() для утверждения, которое будет выполнено.

В PHPUnit 3.4 такой проблемы не было.

Я не могу найти ничего, чтобы помочь разобраться с этой проблемой в документации PHPUnit — я что-то пропустил?

0

Решение

Count — это внутренняя функция PHP, которая не используется в вашем сценарии. Вы издевались над вызовом getMapper () для подсчета (getMapper->Count()). Для вашего теста просто издевайтесь над $this->getMapper("fulltext")->find() и ничего не возвращают, поэтому PHP count () будет равен 0.

0

Другие решения

Оказывается, я слишком полагался на поведение автозагрузки в Zend-реализации PHPUnit и не смог изменить фиктивные объекты PHPUnit.

В этом конкретном случае подвергаемый пересмотру класс не был автоматически загружен из-за ограничений в Zend / PHPUnit и автозагрузки (тест не загружает все приложение целиком — и не должен, так как это должен быть модульный тест) — это использовалось для вызвать ошибку «класс не найден» в PHPUnit 3.4, но новая реализация PHPUnit 4.x создаст класс-заглушку. Класс-заглушка не реализовывал никаких интерфейсов, поэтому встроенный в PHP count () не знал, что объект был Countable.

Теперь мне потребовался конкретный исходный файл для моделируемого класса, и mock (и встроенный PHP count ()) ведут себя точно так, как я ожидал.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector