#php #phpunit
#php #phpunit
Вопрос:
класс ControllerTest расширяет Zend_Test_PHPUnit_ControllerTestCase { public $object; настройка общедоступной функции() { $this->bootstrap = array($this, 'boostrap'); родительский элемент::setUp(); } общедоступная функция bootstrap(){ $this-> application = новое Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $this->application->bootstrap(); } общедоступная функция testIndexAction(){ // тело } }
Это класс для теста. Мой вопрос заключается в том, как реализовать testIndexAction, где фактическая команда в командной строке:
php zfrun.php -a ..index
Комментарии:
1. Откуда
zfrun.php
берется? Можете ли вы сослаться на его исходный код или опубликовать его, если он короткий? Zend’sControllerTestCase
предназначен для предоставления маршрута для отправки, рендеринга представления и создания утверждений о результирующем контенте.2. zfrun.php происходит из тестов, где он также является корневым каталогом приложения. zfrun.php похоже на файл начальной загрузки. Фактический загрузчик, который предназначен для приложения Bootstrap.php также создает экземпляр Zend_Console_Getopt, который также определяет параметр для запуска приложения.
Ответ №1:
Не видя точно, что zfrun.php
делает, я могу только догадываться, и это звучит так, как будто вам нужно отказаться ControllerTestCase
. ControllerTestCase
предназначен для имитации HTTP-запроса для отправки через диспетчер Zend, но вам это не нужно.
Вместо этого вы можете попытаться имитировать вызов zfrun.php
из командной строки, настроив $argv так, как это выглядело бы, и выполнив zfrun.php
самостоятельно:
function testIndexAction() {
$argv = array(
'-a',
'module_name.controller_name.index',
);
require 'zfrun.php';
}
Проблема в том, что это работает только для одного теста, предполагая, zfrun.php
что он определяет классы или функции и не может требоваться несколько раз. Следовательно, вам нужно будет делать все, что zfrun.php
делается в новом базовом классе тестового примера, не используя zfrun.php
самого себя. По сути, реорганизуйте его код в многоразовый вспомогательный метод тестирования.
function executeControllerAction($module, $controller, $action) {
... whatever magic zfrun.php does ...
}
Комментарии:
1. Я просто использую ручное тестирование. На самом деле мне нужно было поработать над настройкой теста PHPUnit.
2. PHPUnit поддерживает ручное и автоматическое тестирование, как вы, без сомнения, обнаружили. Однако вы должны настроить свою среду, чтобы разрешить PHPUnit доступ к вашим классам и / или среде любым выбранным вами путем. Это ответило на ваш вопрос или помогло вам решить проблему, с которой вы столкнулись?
Ответ №2:
Если это тест для вашей домашней страницы, используйте
$this->dispatch('/');
Если нет, вам придется указать ему URL, который запустит маршрут для загрузки этого контроллера.