Treci la conținutul principal

Ce este un test unitar

Un test unitar este un program mic care verifică o singură bucată din codul tău — de obicei o funcție. Rulezi testele după fiecare modificare; dacă o modificare strică ceva, un test te anunță imediat, înainte de utilizatorii tăi.

Instrumentul standard în lumea PHP este PHPUnit. Se instalează o singură dată per proiect cu Composer — composer require --dev phpunit/phpunit — iar programul de rulare ajunge în proiect la ./vendor/bin/phpunit.

Testele fac și modificările sigure: cu teste bune poți rescrie o funcție și afli în câteva secunde dacă se comportă în continuare la fel.


Fișiere, clase și metode de test

Trei reguli de denumire fac dintr-un test un test:

1. Numele fișierului se termină în Test.php — pentru calc.php scrii CalcTest.php. PHPUnit caută fișiere denumite astfel.
2. Clasa din fișier extinde TestCase, clasa de bază a PHPUnit, importată cu use PHPUnit\Framework\TestCase;.
3. Numele metodei începe cu test — de exemplu testAdd. Metodele fără acest prefix nu sunt rulate ca teste, așa că metodele ajutătoare pot sta în aceeași clasă.

În interiorul testului apelezi funcția și dai valoarea așteptată și valoarea obținută efectiv unei aserțiuni precum $this->assertSame(5, add(2, 3)). O aserțiune picată marchează testul ca picat; dacă nu apare nicio picare, testul trece.

Un prim test care trece

testAdd apelează add(2, 3) și compară rezultatul cu 5 într-un singur assertSame. Valorile coincid, așa că nimic nu pică și rularea se încheie cu OK (1 test, 1 assertion).

Prompt
Scrie un fișier de test PHPUnit cu o funcție add care adună două valori int și o clasă AddTest cu o metodă testAdd care verifică dacă add(2, 3) este egal cu 5 folosind assertSame. Arată ieșirea phpunit pentru testul trecut.
Ieșire: script PHP
A first passing test

Un test care pică

Acest add are o eroare — înmulțește. Testul o prinde: PHPUnit numește testul AddTest::testAdd, spune motivul — Failed asserting that 6 is identical to 5. — împreună cu fișierul și linia aserțiunii picate, iar rularea se încheie cu FAILURES!

Prompt
Scrie un fișier de test PHPUnit în care funcția add are o eroare (înmulțește în loc să adune), iar testAdd se așteaptă ca add(2, 3) să fie 5. Arată ieșirea phpunit a testului picat, cu valorile comparate.
Ieșire: script PHP

Rularea testelor

./vendor/bin/phpunit AddTest.php rulează fiecare test din fișier; apelat fără un nume de fișier, PHPUnit rulează întreaga suită de teste a proiectului. Ieșirea implicită este scurtă: un punct pentru fiecare test trecut, un F pentru fiecare picare și o linie de sumar.

Adaugă --testdox pentru a lista fiecare test cu numele său, fiecare pe propria linie, cu o bifă, sub numele clasei. Folosește-l pentru a vedea ce s-a rulat efectiv.

Două teste, listate cu numele lor

Fișierul are două metode de test, una pentru fiecare funcție testată. Cu --testdox, fiecare apare pe propria linie sub numele clasei Calc — se vede că ambele s-au rulat și ambele au trecut, iar sumarul spune OK (2 tests, 2 assertions).

Prompt
Scrie un fișier de test PHPUnit cu două funcții mici, double și half, și câte o metodă de test pentru fiecare într-o clasă CalcTest. Arată ieșirea phpunit --testdox în care ambele teste apar cu numele lor și trec.
Ieșire: script PHP