Pubblicato il

Unit Testing

Unit Test, unittest, testunit, test unit, unit testing.

 

Convenzioni

  1. Nome della classe da testare + Test es.: MiaClasseTest
  2. Estendere phpUnit es.:
    class MiaClasseTest extends PHPUnit_Framework_TestCase(){...}
  3. I TestCase sono metodi pubblici che senza parametri ed iniziano con la parola test es.:  public function testMioTestCase(){...}
  4. utilizzo dei metodi assert...()  dentro i TestCase, per confermare la riuscita del test
  5. esecuzione da command line  phpunit MiaClasseTest  coi seguenti risultati:
    • . = andato a buon fine
    • F = fallito
    • S = saltato
    • E = errore

Organizzazione

  • TestSuite (main)
    • TestSuite (sub)
      • TestCase
      • TestCase (n)

Dove una TestSuite è un raggruppamento di TestCase o di sotto TestSuite.
Il TestCase è un singolo snippet che testa la più minima funzionalità specifica.

 

Fixture
Grazie ai metodi  setUp(){...}  e tearDown(){...}  è possibile testare anche i casi che hanno a che fare col DataBase come una INSERT o una DELETE.

 

Eccezioni
Per testare le eccezioni c’è una classe apposita di phpUint, che estende quella base.

 

Generazione di output
Per testare il codice che ha come risultato una generazione di output, va catturate quest’ultimo in due modi:

  • implementiamo manualmente il test in modo che sfrutti le funzioni di output buffering per immagazzinare l’output in una variabile
  • si utilizza la  PHPUnit_Extensions_OutputTestCase  che utilizza internamente le funzioni di output buffering per catturare l’output generato e successivamente assicurarsi che abbia il valore corretto

 

Performance
Per semplici test di performance si estende la classe apposita  PHPUnit_Extensions_PerformanceTestCase  che impone un limite di tempo per eseguire il test.

 

 

Code Coverage
XDebug funge anche da debugger e profiler per PHP.
phpunit --report /path/alla/mia/directory/di/report MyTestCase
Evidenzierà in rosso le righe di codice non coperte (coverage) dai vari test.
Oggetti Mock
E’  un oggetto che sostituisce uno realmente esistente in modo da emularne il comportamento.
Scriverli a mano potrebbe essere uno spreco di tempo perciò ci sono delle funzionalità che permettono in modo trasparente di generare oggetti Mock.

… continua vedi fonte: http://www.html.it/articoli/phpunit-test-e-funzioni-avanzate-5/

 

Generazione automatica dei test
Tramite il comando  phpunit --skeleton Math  PHPUnit genera semplici test partendo dal codice, l’unica customizzazione andrà fatta nei commenti di ognuno per fornire i valori da testare.

 

 

Fonti

https://phpunit.de/

http://www.html.it/articoli/phpunit-test-di-codice-php-1/

http://www.html.it/articoli/phpunit-test-e-funzioni-avanzate-1/