obiect Mock pentru a testa

Dacă sunteți în echipa de dezvoltare, cele mai multe dintre codul dvs. va depinde, de asemenea, de codul scris de colegii de echipă. Dar ce se întâmplă dacă codul lor nu este disponibilă în acest moment - de exemplu, colegul dvs. nu a terminat de scris-o încă? Și dacă nu se poate verifica codul de alți factori în afara controlului dvs.? Tocmai ai atârna în jurul valorii de a face nimic, așteptând un coechipier va face.

În acest articol demonstrează cum se scrie cod care rezolvă această problemă.

obiect Mock

Ce este, de obiecte simulate?

- acesta este un test aspectul obiectului, care face parte din obiectul real.

Mock-obiecte sunt folosite în unitate de testare pentru a simula comportamentul obiectelor reale în cazurile de testare. Cu ajutorul lor, este mai ușor să verifice funcționalitatea obiectului în cerere. Iată câteva situații în care aveți nevoie pentru a utiliza obiecte simulate:

obiecte Mock în acțiune

Începem cu următoarea unitate de testare, definim așteptările noastre de modul în care obiectivul nostru va fi numit. Valoarea returnată va fi:

Dacă executați acest test, veți obține un eșec. Pentru că nu ne-am dat seama!

Acum să scrie serviciile noastre de implementare. Desigur, primul pas este de a obține date de la Facebook:

Acest test, de asemenea, eșuează, deoarece obiectul Facebook este nevalid. Puteți conecta la punerea în aplicare efectivă a creării efective a instanței la ID-ul aplicației Facebook etc. dar de ce? Daca sunteti interesat, apoi să se abată de la sarcina la îndemână.

Modul în care acest lucru se face cu aspectul de obiecte, cel puțin în cazul nostru, aveți nevoie pentru a crea o clasă care are o metodă get () și returnează valoarea layout. Acesta ar trebui să inducă în eroare clienții noștri, gândire a ceea ce el numește implementarea obiect real, când de fapt este, bate joc.

Acum avem o clasa bate joc, să creați o copie și apoi injectați-o în StatusService, astfel încât să putem folosi. Dar, mai întâi, trebuie să actualizați de instalare StatusService pentru bibliotecă Facebook:

Acum intră în bibliotecă Facebook layout-ul:

Testul continuă să eșueze, dar cel puțin nu primesc eroarea asociată cu apelarea unei metode pe un obiect nu. Mai important, însă, ați acordat o atenție necesității de a pune în aplicare această relație. Acum puteți începe programarea logica de afaceri.

Un alt pas pentru: Folosind un cadru Mocking

Această secțiune prezintă modul de utilizare a Mocking cadru, care vine cu PHPUnit.

În experiența mea, aici sunt unele avantaje ale utilizării layout-cadru, comparativ cu utilizarea batjocoritor scrise de mână:

  • Puteți fi leneș pentru a face o cerere de tine. Am găsit acest lucru valabil mai ales dacă aveți de-a face cu clase abstracte, cu o mulțime de metode abstracte. Poti sa te intrebi, doar anumite metode de o clasă abstractă sau interfață. Dacă o faci cu mâna, atunci trebuie să le facă manual. Acest lucru economisește câteva apăsări de taste, și vine tipuri de pre-ambalate, și instalați doar ceea ce aveți nevoie, și nu trebuie să susțină o nouă clasă pentru fiecare test.
  • Puteți scrie cod curat. Discret, aici este punctul cheie. Fundamentele cadru fac testele au bătut joc mai ușor pentru a înțelege modul în care dvs. bătut joc de scris în test. Nu aveți nevoie pentru a defila în jos sau pentru a comuta între fișierele, răsfoiți scrise de mână au bătut joc scrise într-un alt director. Ce se întâmplă dacă aveți nevoie pentru a apela un obiect bate joc de mai multe ori cu rezultate diferite? Bază batjocorit platforma necesară pentru acest cod este necesar. Astfel, mult mai ușor.

Utilizarea Mocking cadru în PHPUnit

În trecerea la utilizarea cadru PHPUnit, pașii sunt de fapt foarte intuitiv. În această secțiune, vom folosi Mocking cadru în PHPUnit, pentru a crea un obiect de aspect pentru acest exemplu.

Asigurați-vă că mai devreme testul nu funcționează atunci când executați PHPUnit.

Iată ce trebuie să faci în continuare.

  1. Mai întâi definim care obiectele pe mock. În exemplul nostru, ne-am bătut joc de bibliotecă Facebook. Nu același sine.
  2. Acum, că am stabilit că clasa bătut joc, trebuie să știm ce metode din clasa pe care dorim să fie indicarea fictivă a parametrilor și a reveni valori, dacă este cazul. Eu folosesc un șablon de bază în cele mai multe cazuri, cum ar fi acest lucru:
    1. Se specifică numărul de ori o metodă (obligatoriu) se numește
    2. Se specifică numele metodei (necesar)
    3. Setați parametrii că metoda implică (opțional)
    4. Selectați valoarea de retur (opțional)

Să aplicăm măsurile pe care tocmai le-am menționat în exemplul nostru de test.

Odată ce am creat un obiect facebook bate joc-l înapoi restabileste la serviciul nostru:

concluzie

Ai luat cazul cu utilizarea de obiecte pentru testare! Sper că va fi capabil să programeze mai eficient, și mai presus de toate liber de obstacole pe care le va întâlni în viitor.

înregistrări interesante