Zend Framework - testy jednostkowe

Ogólnie rzecz biorąc, możemy debugować aplikację PHP przy użyciu rozszerzenia advanced debugger tool lub za pomocą prostych poleceń, takich jak echo i die. W scenariuszu internetowym musimy przetestować logikę biznesową, a także warstwę prezentacji. Formularze w aplikacji internetowej można testować, wprowadzając odpowiednie dane testowe, aby upewnić się, że działają one zgodnie z oczekiwaniami.

Projekt strony internetowej można przetestować ręcznie za pomocą przeglądarki. Tego typu procesy testowe można zautomatyzować za pomocą testów jednostkowych. Test jednostkowy jest niezbędny w dużych projektach. Te testy jednostkowe pomogą zautomatyzować proces testowania i powiadomią programistę, gdy coś pójdzie nie tak.

Konfigurowanie PHPUnit

Framework Zend integruje się z frameworkiem testów jednostkowych PHPUnit. Aby napisać test jednostkowy dla frameworka Zend, musimy skonfigurować PHPUnit, co można łatwo zrobić za pomocą następującego polecenia Composer.

$ composer require --dev phpunit/phpunit

Po wykonaniu powyższego polecenia otrzymasz odpowiedź, jak pokazano w poniższym bloku kodu.

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

Teraz, gdy otworzysz plik „composer.json”, zobaczysz następujące zmiany -

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

TestCase i Assertions

Framework Zend zapewnia klasy pomocnicze do testowania kontrolera. PlikTestCase jest głównym składnikiem w a PHPUnit Framework do pisania przypadków testowych, a Zend Framework zapewnia abstrakcyjną implementację TestCase, która jest nazywana AbstractHttpControllerTestCase.

Ten AbstractHttpControllerTestCase zapewnia różne Assertmetody i można je pogrupować według funkcjonalności. Są następujące -

  • Request Assertions- Służy do potwierdzenia żądania http. Na przykład assertControllerName.

  • CSS Select Assertions - Służy do sprawdzania odpowiedzi HTML za pomocą modelu HTML DOM.

  • XPath Assertions - Alternatywa dla asercji wyboru CSS opartych na XPath.

  • Redirect Assertions - Służy do sprawdzania przekierowania strony.

  • Response Header Assertions - Służy do sprawdzania nagłówka odpowiedzi, takiego jak kod stanu (assertResponseStatusCode)

Utwórz katalog testów

Test jednostkowy można napisać oddzielnie dla każdego modułu. Całe kodowanie związane z testami należy utworzyć wewnątrztest folder w katalogu głównym modułu.

Na przykład, aby napisać test dla TutorialController dostępnego w module Tutorial, klasę testową należy umieścić w katalogu myapp / module / Tutorial / test / Controller /.

Przykład

Napiszmy klasę testową do testowania jednostkowego TutorialController.

Na początek powinniśmy napisać klasę o nazwie TutorialControllerTest i rozszerzyć ją na AbstractHttpControllerTestCase.

Następnym krokiem jest napisanie pliku Setupmetodę konfiguracji środowiska testowego. Można to zrobić, dzwoniąc dosetApplicationConfig i przekazując nasz główny plik konfiguracyjny aplikacji myapp / config / application.config.php

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

Napisz jedną lub więcej metod i wywołaj różne metody assert w zależności od wymagań.

$this->assertMatchedRouteName('tutorial');

Napisaliśmy klasę testową, a pełna lista jest następująca -

<?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'); 
   } 
}

Teraz otwórz wiersz polecenia, przejdź do katalogu głównego aplikacji i wykonaj plik phpunit wykonywalny dostępny wewnątrz vendor teczka.

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

Wynik będzie taki, jak pokazano w poniższym bloku kodu -

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