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)