В общем, мы можем отлаживать приложение PHP, используя расширенный инструмент отладчика или используя простые команды, такие как echo и die . В веб-сценарии нам необходимо протестировать бизнес-логику, а также уровень представления. Формы в веб-приложении можно проверить, введя соответствующие тестовые данные, чтобы убедиться, что формы работают должным образом.
Дизайн сайта можно проверить вручную с помощью браузера. Этот тип процессов тестирования может быть автоматизирован с помощью модульного тестирования. Модульный тест необходим в больших проектах. Эти модульные тесты помогут автоматизировать процесс тестирования и предупредить разработчика, если что-то пойдет не так.
Настройка PHPUnit
Zend Framework интегрируется с платформой модульного тестирования 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 Framework предоставляет вспомогательные классы для модульного тестирования контроллера. TestCase является основным компонентом в среде PHPUnit для написания тестовых случаев, а Zend Framework предоставляет абстрактную реализацию TestCase, которая называется AbstractHttpControllerTestCase .
Этот AbstractHttpControllerTestCase предоставляет различные методы Assert и может группироваться по функциональности. Они заключаются в следующем —
-
Запрос подтверждения — используется для подтверждения http-запроса. Например, assertControllerName.
-
CSS Select Assertions — Используется для проверки HTML ответа с использованием модели DOM HTML.
-
Утверждения XPath — альтернатива выбранным утверждениям CSS на основе XPath.
-
Утверждения о перенаправлении — используются для проверки перенаправления страницы.
-
Утверждения заголовка ответа — используются для проверки заголовка ответа, например кода состояния (assertResponseStatusCode)
Запрос подтверждения — используется для подтверждения http-запроса. Например, assertControllerName.
CSS Select Assertions — Используется для проверки HTML ответа с использованием модели DOM HTML.
Утверждения XPath — альтернатива выбранным утверждениям CSS на основе XPath.
Утверждения о перенаправлении — используются для проверки перенаправления страницы.
Утверждения заголовка ответа — используются для проверки заголовка ответа, например кода состояния (assertResponseStatusCode)
Создать каталог тестов
Модульный тест может быть написан отдельно для каждого модуля. Все тестовое кодирование должно быть создано внутри тестовой папки в корневом каталоге модуля.
Например, чтобы написать тест для TutorialController, доступный в модуле Tutorial, необходимо поместить класс test в каталог myapp / module / Tutorial / test / Controller /.
пример
Давайте напишем тестовый класс для модульного тестирования TutorialController .
Для начала мы должны написать класс с именем TutorialControllerTest и расширить его до AbstractHttpControllerTestCase.
Следующим шагом является написание метода установки для настройки тестовой среды. Это можно сделать, вызвав метод 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
Результат будет таким, как показано в следующем блоке кода —