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)