Treci la conținutul principal

Cum eșuează un test

Fiecare verificare din un test PHPUnit este o aserțiune — assertSame, assertTrue, assertCount și multe altele. Ce se întâmplă după un eșec decide cum îți structurezi testul:

O aserțiune eșuată oprește imediat metoda de test în care se află — liniile de după ea nu mai rulează niciodată. Celelalte metode de test ale clasei nu sunt afectate: fiecare rulează și eșuează pe cont propriu.

Asta îți dă două instrumente. Pune verificările independente în metode separate, ca fiecare verificare greșită să fie raportată. Pune verificările dependente una după alta în aceeași metodă, ca testul să eșueze rapid la primul pas greșit.


Raportează tot: metode separate

Când mai multe cazuri trebuie verificate într-o singură rulare, dă fiecăruia propria metodă de test. Un caz greșit face să eșueze doar metoda lui — celelalte metode rulează în continuare și fiecare eșec este listat.

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

Vezi toate cazurile greșite dintr-o dată

Acest add ignoră $b, așa că toate cele trei verificări eșuează. Deoarece fiecare verificare este propria metodă de test, toate cele trei mesaje de eșec apar într-o singură rulare — într-o singură metodă ai vedea doar primul.

Prompt
Scrie un fișier de test PHPUnit în care add are o eroare (returnează doar $a, ignorând $b), iar AddTest verifică trei sume diferite în trei metode de test separate, astfel încât fiecare caz greșit să fie raportat. Arată ieșirea phpunit cu toate cele trei mesaje de eșec într-o singură rulare.
Ieșire: script PHP

Eșec rapid: aserțiuni una după alta

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

Aserțiunile puse una după alta în aceeași metodă fac exact asta: primul eșec oprește metoda chiar acolo. Verificările de după el nu mai rulează niciodată — și tocmai acesta este scopul.

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

splitWords are o eroare (împarte după caracterul greșit), așa că se întoarce 1 parte în loc de 3. assertCount o raportează și oprește metoda — verificarea primei părți, de mai jos, nu este atinsă niciodată. Rezumatul o dovedește: Assertions: 1, a rulat o singură aserțiune.

Prompt
Scrie un fișier de test PHPUnit în care o funcție splitWords ar trebui să împartă un șir de caractere separat prin virgule, dar are o eroare (împarte după caracterul greșit). Testul verifică mai întâi numărul de părți cu assertCount, apoi verifică prima parte cu assertSame. Arată ieșirea phpunit în care prima aserțiune eșuată oprește testul înainte de a doua verificare.
Ieșire: script PHP
Stop before the useless checks

Mesaje la aserțiuni

Fiecare aserțiune acceptă un ultim argument opțional: un mesaj simplu care este afișat numai când verificarea eșuează. $this->assertTrue(isEven(4), "4 should be even") rămâne silențios cât timp verificarea trece și se explică atunci când nu trece.

Mesaje simple

Două verificări booleene cu mesaje simple. Ambele trec aici, așa că mesajele rămân silențioase și rularea afișează OK (1 test, 2 assertions).

Prompt
Scrie un fișier de test PHPUnit cu o funcție isEven și un test care verifică dacă isEven(4) este true și isEven(3) este false, dând fiecărei aserțiuni un mesaj simplu de eșec. Arată ieșirea phpunit a testului trecut.
Ieșire: script PHP
Plain messages