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)