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ă. Dacă copiezi testul de cinci ori, ai cinci locuri de întreținut.

Soluția este un test bazat pe tabel: pune cazurile într-o listă de tupluri — fiecare caz conține un nume, intrările și rezultatul așteptat — și rulează aceeași verificare pentru toate.

Adăugarea unui caz nou înseamnă o singură linie nouă în tabel. Acesta este unul dintre cele mai des întâlnite tipare de testare în codul real.


Tabelul

Cel mai simplu tabel este o listă de tupluri chiar în interiorul testului. Fiecare element este un caz: un nume (pentru mesajul de eșec), intrările și rezultatul așteptat.

Bucla apelează funcția o dată pentru fiecare caz și compară rezultatul. Prima nepotrivire ar opri testul la acel caz, iar mesajul conține numele cazului — așa afli care rând s-a stricat.

Patru cazuri într-un singur tabel

Patru cazuri, o buclă, o verificare. Aici toate trec, așa că rularea arată un singur test trecut. Ca să testezi o a cincea situație, ai adăuga o linie în tabel — bucla rămâne neschimbată.

Prompt
Scrie un test Python bazat pe tabel pentru o funcție add: o listă de tupluri cu numele cazului, două intrări și rezultatul așteptat, care acoperă unu plus unu, pozitiv și negativ, ambele negative și zerouri. Parcurge tabelul într-o buclă și verifică fiecare caz cu assert, cu un mesaj care include numele cazului. Arată ieșirea pytest -v.
Ieșire: program Python complet
Four cases in one table

Un test pentru fiecare caz cu parametrize

pytest poate transforma fiecare rând din tabel în propriul său test: decoratorul @pytest.mark.parametrize primește numele argumentelor și lista de cazuri și apelează funcția de test o dată pentru fiecare rând.

Lista ids dă fiecărui caz un nume. Numele apar acum în ieșirea pytest -v, de exemplu test_add[both_negative]. Fiecare caz trece sau eșuează separat, așa că un rând stricat se observă ușor într-un tabel lung — iar rândurile de după el sunt verificate în continuare.

Fiecare caz primește un nume

Același tabel, scris sub formă de cazuri parametrize. Ieșirea detaliată afișează acum toate cele patru cazuri separat — vezi exact ce cazuri au rulat și au trecut, iar rezumatul spune 4 passed.

Prompt
Scrie același test bazat pe tabel pentru add cu @pytest.mark.parametrize, dând fiecărui caz un id, astfel încât fiecare caz să apară separat în ieșirea detaliată. Arată ieșirea pytest -v cu toate cele patru linii ale cazurilor.
Ieșire: program Python complet

Rularea unui singur caz

Cazurile pot fi selectate din linia de comandă cu -k, care caută potriviri în numele testului și în id-ul cazului:

pytest -v -k "both_negative"

Rulează doar cazul potrivit; celelalte sunt deselected (deselectate) și nici nu pornesc. Acest lucru este ideal când repari un caz stricat: rulezi din nou doar acel caz până devine verde, apoi rulezi totul din nou.

Filtrare cu -k

Același fișier ca mai sus, rulat cu -k "both_negative". Se execută doar unul dintre cele patru cazuri — antetul numără 3 deselected și 1 selected, iar rezumatul spune 1 passed, 3 deselected.

Prompt
Folosind testul parametrizat pentru add, arată rezultatul rulării unui singur caz cu pytest -v -k "both_negative" — doar acel caz trebuie să ruleze, iar celelalte trei trebuie să fie deselectate.
Ieșire: program Python complet