Учебники

Zend Framework — модульное тестирование

В общем, мы можем отлаживать приложение 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 

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