Treci la conținutul principal

Un test, multe cazuri

Majoritatea funcțiilor au nevoie de aceeași verificare pentru multe intrări: valori normale, valori negative, zero, cazuri limită. Copierea testului de cinci ori înseamnă cinci locuri de întreținut.

Modul PHPUnit este un furnizor de date (data provider): pui cazurile într-un singur tabel — fiecare rând conține un nume, intrările și rezultatul așteptat — și lași executorul să apeleze o singură metodă de test câte o dată pentru fiecare rând.

Adăugarea unui caz nou devine un rând nou în tabel. Acesta este cel mai frecvent model de test pe care îl vei vedea în codul PHPUnit real.


Furnizorul de date

Furnizorul este o metodă public static care returnează tabelul: un tablou de rânduri, indexate după numele cazului. Metoda de test primește valorile unui rând ca parametri și este legată de furnizor prin atributul #[DataProvider('addCases')] (importat din PHPUnit\Framework\Attributes).

PHPUnit apelează metoda o dată pentru fiecare rând, iar fiecare rând contează ca test propriu — un rând defect eșuează singur, așa că apar toate cazurile defecte, nu doar primul.

Patru cazuri într-un singur tabel

Patru rânduri, o singură metodă de test, o singură aserțiune. Toate trec — sumarul spune OK (4 tests, 4 assertions). Pentru a testa o a cincea situație ai adăuga un rând în tabel — metoda rămâne neatinsă.

Prompt
Scrie un test PHPUnit cu data provider pentru o funcție add: o metodă statică de tip provider care returnează rânduri indexate după numele cazului, fiecare rând cu două intrări int și rezultatul așteptat, acoperind unu plus unu, pozitiv și negativ, ambele negative și zerouri. Leagă providerul la o singură metodă de test prin atributul DataProvider. Afișează ieșirea phpunit.
Ieșire: script PHP
Four cases in one table

Cazuri cu nume folosind --testdox

--testdox arată ce au făcut rândurile: fiecare caz apare cu numele setului său de date, ca Add with data set "both negative".

Fiecare rând trece sau eșuează pe cont propriu, ceea ce face ca un caz defect să fie ușor de observat într-un tabel lung.

Fiecare caz primește un nume

Același tabel, rulat cu --testdox. Ieșirea listează acum toate cele patru cazuri separat — vezi exact care cazuri au rulat și au trecut.

Prompt
Scrie același test PHPUnit cu data provider pentru add și rulează-l cu --testdox, astfel încât fiecare caz să apară cu numele setului său de date. Afișează ieșirea cu toate cele patru linii de cazuri.
Ieșire: script PHP

Rularea unui singur caz

Cazurile pot fi selectate din linia de comandă cu --filter, folosind numele setului de date între ghilimele:

./vendor/bin/phpunit --testdox --filter '"both negative"' AddTest.php

Rulează doar cazul care se potrivește. Acest lucru este perfect când repari un caz defect: rulezi din nou doar acel caz până devine verde, apoi rulezi din nou totul.

Filtrarea unui singur set de date

Același fișier ca mai sus, rulat cu --filter '"both negative"'. Se execută doar unul dintre cele patru cazuri — celelalte nici nu sunt pornite: sumarul spune OK (1 test, 1 assertion).

Prompt
Folosind testul PHPUnit cu data provider pentru add, arată ieșirea rulării unui singur caz cu --testdox --filter '"both negative"' — trebuie să apară doar acel set de date.
Ieșire: script PHP