Treci la conținutul principal

Ce este un test unitar

Un test unitar este un mic program 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 îți spune imediat, înaintea utilizatorilor tăi.

Instrumentul standard în lumea Python este pytest. Se instalează o singură dată cu pip install pytest și nu are nevoie de cod de rutină: un test este o funcție obișnuită, iar o verificare este instrucțiunea obișnuită assert.

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


Fișiere de test și funcții de test

Două reguli de denumire fac dintr-un test un test:

1. Numele fișierului începe cu test_ — pentru calc.py scrii test_calc.py. pytest caută în folder fișierele denumite astfel (merg și numele care se termină în _test.py) și le rulează doar pe acestea.
2. Numele funcției începe cu test_ și funcția nu primește argumente — def test_add():. Funcțiile fără acest prefix nu sunt colectate, așa că funcțiile ajutătoare pot sta în același fișier.

În interiorul testului apelezi funcția, compari ce ai obținut cu ce vrei și lași assert să raporteze diferența. Un assert care eșuează ridică o eroare care marchează testul ca eșuat; dacă nu se ridică nicio eroare, testul trece.

Un prim test care trece

test_add apelează add(2, 3) și compară rezultatul cu 5 într-un singur assert. Valorile coincid, deci nu se ridică nimic și testul trece: linia afișează PASSED, iar rularea se încheie cu 1 passed.

Prompt
Scrie un fișier de test Python cu o funcție add care adună două numere și o funcție test_add care verifică, cu un simplu assert, că add(2, 3) este egal cu 5. Arată ieșirea pytest -v a rulării reușite.
Ieșire: program Python complet
A first passing test

Un test care eșuează

Această funcție add are o eroare — înmulțește. Testul o prinde: pytest reafișează linia assert care a eșuat, arată valorile din ambele părți — assert 6 == 5 — iar rularea se încheie cu 1 failed.

Prompt
Scrie un fișier de test Python în care funcția add are o eroare (înmulțește în loc să adune) și un test_add care se așteaptă ca add(2, 3) să fie 5. Arată ieșirea pytest -v a rulării eșuate, cu valorile comparate.
Ieșire: program Python complet

Rularea testelor

python3 -m pytest rulează toate fișierele de test din folderul curent (când pytest se află în PATH, simplul pytest face același lucru). Ieșirea implicită este scurtă: câte un punct pentru fiecare test care trece și o linie de rezumat.

pytest -v (verbose, detaliat) afișează fiecare test după nume, urmat de PASSED sau FAILED. Folosește-l ca să vezi ce s-a rulat de fapt. Dacă îi dai un nume de fișier, pytest test_calc.py rulează doar acel fișier.

Două teste, ieșire detaliată

Fișierul are două funcții de test, câte una pentru fiecare funcție testată. Cu -v, fiecare apare pe propria linie — vezi că ambele au rulat și ambele au trecut, iar rezumatul spune 2 passed.

Prompt
Scrie un fișier de test Python cu două funcții mici, double și half, și câte o funcție de test pentru fiecare. Arată ieșirea pytest -v în care ambele teste apar după nume și trec.
Ieșire: program Python complet