Treci la conținutul principal

Două moduri de a eșua

Un test poate raporta o problemă în două moduri, iar diferența constă în ce se întâmplă după:

Un assert care eșuează ridică AssertionError, iar asta oprește testul în care se află — verificările scrise după el nu mai rulează niciodată. Acesta este comportamentul de oprire rapidă (fail-fast) și este cel pe care îl ai în mod implicit.

Ca să raportezi o problemă și să continui verificările, pune fiecare verificare în propria funcție test_. Testele sunt independente: un test care eșuează nu îl oprește pe următorul, așa că o singură rulare poate raporta mai multe probleme deodată.

Un assert poate avea și un mesaj: assert got == want, "explanation". Textul este afișat deasupra valorilor comparate atunci când verificarea eșuează.


Teste separate: raportează și continuă

Când vrei să verifici mai multe cazuri la rând, dă fiecărui caz propria funcție de test. Un caz greșit este raportat, iar cazurile de după el sunt verificate în continuare.

Astfel, o singură rulare pytest îți arată toate stricăciunile — nu doar primul caz greșit.

Vezi toate cazurile greșite deodată

Această funcție add ignoră b, așa că toate cele trei verificări eșuează. Deoarece fiecare verificare este un test separat, toate cele trei blocuri de eșec apar într-o singură rulare, iar rezumatul spune 3 failed. Scrise ca trei assert-uri într-un singur test, doar primul ar fi fost raportat.

Prompt
Scrie un fișier de test Python în care add are o eroare (returnează doar a, ignorând b) și trei funcții de test separate verifică trei sume diferite, astfel încât fiecare caz greșit este raportat. Arată ieșirea pytest -v cu toate cele trei eșecuri într-o singură rulare.
Ieșire: program Python complet

Un assert eșuat oprește testul

Uneori o verificare eșuată înseamnă că restul testului nu poate funcționa. Un caz tipic: testul pregătește mai întâi o valoare, apoi o examinează. Dacă pregătirea a mers deja prost, examinarea ar fi inutilă sau chiar ar provoca o eroare.

Aici assert-ul cu oprire rapidă este exact ce îți trebuie. El încheie testul chiar în acel punct, iar verificările de după el nu mai rulează niciodată — și tocmai acesta este scopul.

Oprește-te înainte de verificările inutile

split_words are o eroare (împarte după caracterul greșit), așa că se întoarce 1 parte în loc de 3. Primul assert eșuează cu mesajul număr de părți: 1, se așteptau 3 - nu le pot verifica și oprește testul — nu se mai ajunge la verificarea primei părți de mai jos.

Prompt
Scrie un fișier de test Python în care o funcție split_words ar trebui să împartă un șir separat prin virgule, dar are o eroare (împarte după caracterul greșit). Testul verifică mai întâi numărul de părți cu un assert cu mesaj, apoi verifică prima parte. Arată ieșirea pytest -v în care primul assert eșuat oprește testul înainte de a doua verificare.
Ieșire: program Python complet
Stop before the useless checks

Mesaje la verificările booleene

Pentru un răspuns simplu de tip da sau nu nu există o pereche got și want — verifici cu assert chiar valoarea: assert is_even(4) eșuează când apelul returnează False.

Mesajul de după virgulă este opțional, dar la o valoare booleană simplă merită scris: fără el, eșecul arată doar apelul care a returnat False; cu el, eșecul spune și ce înseamnă asta.

Mesaje simple

Două verificări booleene simple cu mesaje simple, ambele într-un singur test. Aici amândouă trec, așa că mesajele nu apar, iar rularea afișează 1 passed.

Prompt
Scrie un fișier de test Python cu o funcție is_even și un singur test care verifică cu assert că is_even(4) este adevărat și is_even(3) este fals, fiecare assert având un mesaj text simplu. Arată ieșirea pytest -v cu testul trecut.
Ieșire: program Python complet
Plain messages