Zend Framework - Модульное тестирование

В общем, мы можем отлаживать приложение PHP, используя advanced debugger tool или с помощью простых команд, например echo и die. В веб-сценарии нам необходимо протестировать бизнес-логику, а также уровень представления. Формы в веб-приложении можно протестировать, введя соответствующие тестовые данные, чтобы убедиться, что формы работают должным образом.

Дизайн веб-сайта можно проверить вручную с помощью браузера. Процессы тестирования такого типа можно автоматизировать с помощью модульного тестирования. Модульный тест необходим в больших проектах. Эти модульные тесты помогут автоматизировать процесс тестирования и предупредить разработчика, когда что-то пойдет не так.

Настройка PHPUnit

Платформа Zend интегрируется со средой модульного тестирования PHPUnit. Чтобы написать модульный тест для фреймворка Zend, нам нужно настроить PHPUnit, что можно легко сделать с помощью следующей команды Composer.

$ composer require --dev phpunit/phpunit

После выполнения указанной выше команды вы получите ответ, как показано в следующем блоке кода.

Using version ^5.7 for phpunit/phpunit 
./composer.json has been updated 
Loading composer repositories with package information 
Updating dependencies (including require-dev) 
Nothing to install or update 
Writing lock file 
Generating autoload files

Теперь, когда вы откроете файл «composer.json», вы увидите следующие изменения:

"require-dev": { 
   "phpunit/phpunit": "^5.7" 
}

TestCase и утверждения

Платформа Zend предоставляет вспомогательные классы для модульного тестирования контроллера. ВTestCase является основным компонентом в PHPUnit framework для написания тестовых примеров, а Zend Framework предоставляет абстрактную реализацию TestCase, которая называется AbstractHttpControllerTestCase.

Этот AbstractHttpControllerTestCase предоставляет различные Assertметоды и могут быть сгруппированы по функциональности. Они следующие -

  • Request Assertions- Используется для подтверждения HTTP-запроса. Например, assertControllerName.

  • CSS Select Assertions - Используется для проверки HTML-ответа с использованием модели HTML DOM.

  • XPath Assertions - Альтернатива утверждениям выбора CSS на основе XPath.

  • Redirect Assertions - Используется для проверки перенаправления страницы.

  • Response Header Assertions - Используется для проверки заголовка ответа, такого как код состояния (assertResponseStatusCode)

Создать каталог тестов

Модульный тест можно написать отдельно для каждого модуля. Все коды, относящиеся к тестированию, должны быть созданы внутриtest папка в корневом каталоге модуля.

Например, чтобы написать тест для TutorialController, доступного в модуле Tutorial, тестовый класс необходимо поместить в каталог myapp / module / Tutorial / test / Controller /.

пример

Давайте напишем тестовый класс для модульного тестирования TutorialController.

Для начала мы должны написать класс TutorialControllerTest и расширить его до AbstractHttpControllerTestCase.

Следующим шагом будет написание Setupметод настройки тестовой среды. Это можно сделать, позвонив вsetApplicationConfig метод и передача нашего основного файла конфигурации приложения myapp / config / application.config.php

public function setUp() { 
   $configOverrides = [];  
   $this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides 
   )); 
   parent::setUp(); 
}

Напишите один или несколько методов и вызовите различные методы assert в зависимости от требований.

$this->assertMatchedRouteName('tutorial');

Мы написали тестовый класс, и полный список выглядит следующим образом:

<?php  
namespace TutorialTest\Controller;  
use Tutorial\Controller\TutorialController; 
use Zend\Stdlib\ArrayUtils; 
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;  

class TutorialControllerTest extends AbstractHttpControllerTestCase { 
   public function setUp() { 
      $configOverrides = [];  
      $this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides 
      ));  
      parent::setUp(); 
   }  
   public function testIndexActionCanBeAccessed() { 
      $this->dispatch('/tutorial', 'GET'); $this->assertResponseStatusCode(200); 
      $this->assertModuleName('tutorial'); $this->assertControllerName(TutorialController::class); 
      $this->assertControllerClass('TutorialController'); $this->assertMatchedRouteName('tutorial'); 
   } 
}

Теперь откройте командную строку, перейдите в корневой каталог приложения и выполните команду phpunit исполняемый файл доступен внутри vendor папка.

cd /path/to/app  
./vendor/bin/phpunit ./vendor/bin/phpunit module/
   Tutorial/test/Controller/TutorialControllerTest.php

Результат будет таким, как показано в следующем блоке кода -

PHPUnit 5.7.5 by Sebastian Bergmann and contributors.  
.1 / 1 (100%)  
Time: 96 ms, Memory: 8.00MB  
OK (1 test, 5 assertions)