Zend Framework - Test di unità
In generale, possiamo eseguire il debug di un'applicazione PHP utilizzando il advanced debugger tool o usando semplici comandi come echo e die. In uno scenario web, dobbiamo testare le logiche di business e il livello di presentazione. I moduli in un'applicazione Web possono essere testati immettendo dati di test pertinenti per garantire che i moduli funzionino come previsto.
Il design di un sito web può essere testato manualmente utilizzando un browser. Questo tipo di processi di test possono essere automatizzati utilizzando i test unitari. Uno unit test è essenziale nei grandi progetti. Questi test unitari aiuteranno ad automatizzare il processo di test e avviseranno lo sviluppatore quando qualcosa va storto.
Configurazione di PHPUnit
Il framework Zend si integra con il framework di test di unità PHPUnit. Per scrivere uno unit test per il framework Zend, dobbiamo impostare PHPUnit, che può essere facilmente eseguito utilizzando il seguente comando Composer.
$ composer require --dev phpunit/phpunit
Dopo aver eseguito il comando precedente, riceverai una risposta come mostrato nel seguente blocco di codice.
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
Ora, quando apri il file "composer.json", vedrai le seguenti modifiche:
"require-dev": {
"phpunit/phpunit": "^5.7"
}
TestCase e asserzioni
Il framework Zend fornisce classi helper per testare l'unità del controller. IlTestCase è il componente principale in un file PHPUnit framework per scrivere i casi di test e Zend Framework fornisce un'implementazione astratta del TestCase che viene chiamato come AbstractHttpControllerTestCase.
Questo AbstractHttpControllerTestCase fornisce vari Assertmetodi e possono essere raggruppati per funzionalità. Sono i seguenti:
Request Assertions- Usato per affermare la richiesta http. Ad esempio, assertControllerName.
CSS Select Assertions - Utilizzato per controllare la risposta HTML utilizzando il modello HTML DOM.
XPath Assertions - Un'alternativa alle asserzioni di selezione CSS basate su XPath.
Redirect Assertions - Usato per controllare il reindirizzamento della pagina.
Response Header Assertions - Utilizzato per controllare l'intestazione della risposta come il codice di stato (assertResponseStatusCode)
Crea directory dei test
Un test unitario può essere scritto separatamente per ogni modulo. Tutta la codifica relativa ai test deve essere creata all'interno del filetest cartella nella directory principale del modulo.
Ad esempio, per scrivere un test per il TutorialController disponibile nel modulo Tutorial, la classe di test deve essere collocata nella directory myapp / module / Tutorial / test / Controller /.
Esempio
Scriviamo una classe di test per testare l'unità TutorialController.
Per cominciare, dovremmo scrivere una classe chiamata TutorialControllerTest ed estenderla a AbstractHttpControllerTestCase.
Il prossimo passo è scrivere un file Setupmetodo per configurare l'ambiente di test. Questo può essere fatto chiamando ilsetApplicationConfig e passando il nostro file di configurazione dell'applicazione principale myapp / config / application.config.php
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides
));
parent::setUp();
}
Scrivi uno o più metodi e chiama diversi metodi di asserzione a seconda del requisito.
$this->assertMatchedRouteName('tutorial');
Abbiamo scritto la classe di test e l'elenco completo è il seguente:
<?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');
}
}
Ora, apri un prompt dei comandi, passa alla directory principale dell'applicazione ed esegui il file phpunit eseguibile disponibile all'interno del vendor cartella.
cd /path/to/app
./vendor/bin/phpunit ./vendor/bin/phpunit module/
Tutorial/test/Controller/TutorialControllerTest.php
Il risultato sarà come mostrato nel seguente blocco di codice:
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
.1 / 1 (100%)
Time: 96 ms, Memory: 8.00MB
OK (1 test, 5 assertions)