Bazele de unitate de testare in php folosind PHPUnit

O situație familiară: sunteți în curs de dezvoltare o aplicație pentru a rezolva probleme și, uneori, există un sentiment că sunteți de mers pe jos într-un cerc. Regula un bug, și odată ce există un alt. Uneori este una pe care le-ați corectat acum 30 de minute, uneori - noi. Debugging devine foarte dificilă, dar există o modalitate bună și ușoară din această situație. teste de unitate nu numai că poate ameliora durerea de dezvoltare, dar, de asemenea, ajuta să scrie cod care este mai ușor de întreținut și mai ușor să se schimbe.

Pentru a înțelege ce, este necesar un test de unitate pentru a defini termenul de „modul“. Modul (sau unitate) - face parte din rezultatul aplicării operațiunii funcționale din care putem verifica (sau test). Unitatea de testare - aceasta este, de fapt verifică dacă modulul funcționează exact ca ozhidaetsya.Napisav o dată testele ori de câte ori face modificări codului, va trebui doar pentru a rula teste pentru a verifica dacă totul este corect. Deci, puteți fi întotdeauna sigur că modificările dvs. nu rupe sistemul.

Mituri despre unitate de testare

În ciuda tuturor beneficiilor de unitate de testare, nu toți dezvoltatorii l folosească. De ce? Există mai multe răspunsuri la această întrebare, dar toate dintre ele - nu scuze prea bine. Luați în considerare cauzele comune și să încerce să înțeleagă de ce acestea nu sunt justificate.

Scrierea teste durează prea mult timp

Nu este nevoie pentru a testa - și deci codul funcționează!

O altă justificare pentru dezvoltatori, aplicația se execută - nu este nevoie de a testa. Ei cunosc aplicarea și cunosc slăbiciunile sale și să fie capabil de a repara tot ceea ce este necesar, uneori, timp de câteva secunde. Dar imaginați-vă că face un nou dezvoltator care nu are nici o idee despre modul în care codul pentru dezvoltarea de aplicații. Un novice poate face orice modificări care se pot sparge orice. teste de unitate pentru a ajuta la evitarea unor astfel de situații.

Acest neinteresante

Și un alt motiv pentru care dezvoltatorii nu le place teste - este interesant. Dezvoltatorii sunt de natură să rezolve problemele. Scrierea codului - este ca pentru a crea ceva din nimic, crearea de ordine din haos, pentru a crea ceva util. Ca rezultat al testului scris, devine o afacere plictisitoare, o chestiune care se poate face după activitatea principală. Și testarea ia un loc în spate. Dar uita-te la ea un alt mod: pentru a prinde un ceas bug urât -, de asemenea, din păcate.

Începem să practice. În exemplele noastre vom folosi biblioteca PHPUnit. Cel mai simplu mod de a instala PHPUnit - strângeți canalul PEAR.

Dacă totul merge bine, toate instrumentele necesare sunt instalate. Dacă doriți să instalați manual PHPUnit - veți găsi instrucțiuni aici.

primul test

Utilizarea PHPUnit, veți scrie clasele de testare care conțin metode de testare toate acestea trebuie să îndeplinească următoarele acorduri:

  • În cele mai multe cazuri, va moșteni o PHPUnit_Framework_TestCase de clasă. care va oferi acces la metodele încorporate, de exemplu, SetUp () și teardown ().
  • Numele testului clasa de test este format prin adăugarea de cuvinte în numele clasei de test. De exemplu, testați clasa RemoteConnect. de unde și numele testului - RemoteConnectTest.
  • Denumirile metodelor de testare ar trebui să înceapă întotdeauna cu "test" (de exemplu, testDoesLikeWaffles ()). Metodele trebuie să fie public. Puteți utiliza metode particulare în testele lor, dar nu vor rula testele prin PHPUnit.
  • Metodele de testare nu iau parametri. Trebuie să scrie cât mai mult posibil metode de testare pentru independente și autosuficientă. uneori este incomod, dar veți obține un teste curate și eficiente.

Scrieți o clasă mică pentru testare RemoteConnect.php:

Dacă vrem să testeze funcționalitatea de a se conecta la un server de la distanță, atunci trebuie să scrie un astfel de test:

Clasa tester moștenește de la PHPUnit clasă de bază, astfel încât și toate funcționalitățile necesare. Primele două metode - și teardown - SETARE un exemplu al acestei funcționalități încorporate. Aceste funcții auxiliare, care fac parte din fiecare test. Ei alerga pentru a rula toate testele și după, respectiv. Dar acum suntem interesați în metoda testConnectionIsValid. Această metodă creează un obiect de tip RemoteConnect. și determină metoda connectToServer.

Noi numim o altă funcție assertTrue auxiliară în testul nostru. Această funcție este determinată printr-o simplă declarație (afirmație): verifică dacă adevărul a trecut valoarea. Alte funcții auxiliare sunt efectuate prin verificarea proprietăților obiectelor, dosar existența, prezența cheii în matrice, sau potrivire expresie regulată. În cazul nostru, dorim să ne asigurăm conectarea corectă la serverul de la distanță, și anume că funcția connectToServer returnează true.

Rularea testelor

Testele conduse prin simpla apelarea PHPUnit comanda care arată fișierul php cu teste:

PHPUnit ruleaza toate testele și să colecteze unele statistici: testul a fost finalizat sau nu cu succes, numărul de teste și afirmații (afirmații) și o afișează toate. Exemplu O:

Pentru fiecare test rezultat completat va fi afișat: Dacă testul a fost de succes, «F», în cazul în care testul eșuează, «I» în cazul în care testul nu poate fi finalizată, iar «S», în cazul în care testul a fost trecut „“.

În acest exemplu, testul a fost finalizat cu succes, atunci funcționează funcția de testat cum era de așteptat. Dar numai funcția de verificare privind funcționarea corectă nu este suficient, trebuie să verificați, de asemenea, operarea funcțiilor atunci când sunt utilizate în mod incorect.

PHPUnit oferă un set de teste de bază, care acoperă majoritatea situațiilor posibile. Desigur, uneori trebuie să scrie teste inteligente care testează funcționalitatea aplicațiilor non-triviale. Dar, utilizate în principal funcțiile de bază PHPUnit:

Verificarea valorilor transmise pentru egalitate adevărat / fals

De exemplu, există o funcție care returnează un obiect (returnSampleObject) și dorim să ne asigurăm că tipul de obiectul returnat va fi necesar:

Un test - o afirmație (assert)

La fel ca în toate domeniile de dezvoltare de software, testare au o mai bună practică. Unul dintre ei - „un test - o declarație» (un test, o afirmație). Această regulă se va scrie scurt și ușor de citit teste. Dar, uneori, există gânduri: „Din moment ce suntem aici verifica, și altceva în același timp cecul!“. De exemplu:

-Test condus de dezvoltare (Test Driven Development)

Ar fi greșit, vorbind de testare nu este de a menționa tehnica comună de dezvoltare - dezvoltare prin testare (de dezvoltare condus de testare). TDD - o tehnică utilizată în dezvoltarea de software. Ideea de bază a acestei tehnici constă în faptul că primele teste scrise, și numai apoi scris teste scrise de cod aplicație, care va lua aceste teste.

A se vedea, de asemenea,

  • Bazele de unitate de testare in php folosind PHPUnit
    Testarea unitara in PHP prin intermediul PHPUnit. În profunzime ASSERT-metode.
  • Bazele de unitate de testare in php folosind PHPUnit
    Unitatea de testare cu PHPUnit. Adnotările si mock obiecte.
  • Bazele de unitate de testare in php folosind PHPUnit
    Înregistrează-te într-un singur clic pe Google
  • Bazele de unitate de testare in php folosind PHPUnit
    Comenzi pentru lucrul peste SSH
  • Bazele de unitate de testare in php folosind PHPUnit
    Expresii regulate în Java. Partea 1.
  • Bazele de unitate de testare in php folosind PHPUnit
    Unele expresii regulate utile pentru dezvoltarea web.
  • Bazele de unitate de testare in php folosind PHPUnit
    Citirea înregistrărilor Google+ folosind PHP și API-ul Google+
  • Bazele de unitate de testare in php folosind PHPUnit
    sistem de înregistrare simplu în PHP si MySQL