PHPUnit настраивает тест

#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’s ControllerTestCase предназначен для предоставления маршрута для отправки, рендеринга представления и создания утверждений о результирующем контенте.

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, который запустит маршрут для загрузки этого контроллера.