În calitate de dezvoltator PHP, puteți folosi tehnica de dezvoltare bazată pe test (TDD) pentru a vă dezvolta software-ul prin scrierea de teste. În mod tipic, TDD va împărți fiecare sarcină a dezvoltării în unități individuale. Un test este apoi scris pentru a se asigura că unitatea se comportă așa cum era de așteptat.
Fiecare proiect care folosește dezvoltarea testată rulează în mod repetat trei pași simpli:
Continuați să mersați cu bicicleta prin acești trei pași, câte un test, construind funcționalitatea sistemului. Testarea vă va ajuta să refaceți, ceea ce vă permite să vă îmbunătățiți design-ul în timp și faceți mai multe probleme de proiectare mai evidente.
Se numesc testele care conțin componente individuale mici teste unitare. În timp ce testele unității pot fi efectuate independent, dacă testați unele dintre componente atunci când sunt integrate cu alte componente, faceți acest lucru testarea integrării. Cel de-al treilea tip de testare este testele de încercare. Testele de testare vă permit să vă testați codul fără a trebui să efectuați apeluri reale către o bază de date.
În zilele noastre, pe măsură ce utilizați sintaxa modernă IDE PHP, feedback-ul nu este o afacere mare. Unul dintre aspectele importante ale dezvoltării dvs. este să vă asigurați că codul face ceea ce vă așteptați să facă. Pe măsură ce software-ul este complicat (componente diferite integrate unul cu celălalt), ar fi dificil ca toate așteptările noastre să devină realitate. Mai ales la sfârșitul proiectului, datorită dezvoltării, proiectul va deveni mai complex și, deci, mai dificil de depanat și de testat.
TDD verifică faptul că codul face ceea ce vă așteptați să facă. Dacă ceva nu merge bine, există doar câteva linii de cod pentru a verifica din nou. Greșelile sunt ușor de găsit și repede. În TDD, testul se concentrează pe comportament, nu pe implementare. TDD oferă codul dovedit, care a fost testat, proiectat și codat.
PHPUnit este standardul de facto pentru testarea unităților PHP. Este în esență un cadru pentru scrierea de teste și furnizarea instrumentelor de care veți avea nevoie pentru a rula teste și a analiza rezultatele. PHPUnit își derivă structura și funcționalitatea de la Knit Beck's SUnit.
Există mai multe afirmații diferite care vă pot ajuta să testați rezultatele tuturor tipurilor de apeluri din aplicațiile dvs. Uneori trebuie să fii puțin mai creativ pentru a testa o funcție mai complexă, dar afirmațiile oferite de PHPUnit acoperă majoritatea cazurilor pe care le-ai dori să le testezi. Iată o listă a câtorva dintre cele mai obișnuite pe care le veți folosi în testele dvs.:
În mod implicit, PHPUnit 4.0 este instalat în Laravel și este posibil să executați următoarea comandă pentru ao actualiza:
bash compozitor global necesită "phpunit / phpunit = 5.0." "
phpunit.xml
fișierul din directorul rădăcină Laravel vă va permite să faceți unele configurații. În acest caz, dacă doriți să înlocuiți configurația implicită, puteți edita fișierul:
„xml
"
După cum vedeți în codul de mai sus, am adăugat configurația bazei de date a eșantionului (care nu este utilizată în articol).
Doctrina este un ORM care implementează modelul de mapper de date și vă permite să faceți o separare clară a regulilor de afaceri ale aplicației de stratul de persistență al bazei de date. Pentru a configura doctrina, există o punte care să permită potrivirea cu configurația existentă a lui Laravel 5. Pentru a instala Doctrina 2 în cadrul proiectului Laravel, executăm următoarea comandă:
bash compozitorul cere laravel-doctrină / orm
Ca de obicei, pachetul trebuie adăugat la app / config.php
, ca furnizor de servicii:
php LaravelDoctrină \ ORM \ DoctrineServiceProvider :: clasă,
Aliasul ar trebui, de asemenea, să fie configurat:
php 'EntityManager' => LaravelDoctrină \ ORM \ Facade \ EntityManager :: clasa
În cele din urmă, publicăm configurația pachetului cu:
bash php artizan vânzător: publish --tag = "config"
Înainte de orice altceva, ar trebui să știți despre fixări. Luminile sunt folosite pentru a încărca un set de date controlate într-o bază de date, de care avem nevoie pentru testare. Din fericire, Doctrina 2 are o bibliotecă care vă ajută să scrieți corpurile de lucru pentru Doctrina ORM.
Pentru a instala pachetul de fișiere în aplicația noastră Laravel, trebuie să executați următoarea comandă:
bash compozitorul necesită - doctrină / doctrine-fixtures-bundle
Să ne creăm dispozitivul Teste / Fixtures.php
:
"Testarea spațiului de nume php, folosiți Doctrine \ Common \ Persistence \ ObjectManager; utilizați Doctrine \ Common \ DataFixtures \ FixtureInterface; utilizați aplicația \ Entity \ Post;
($) Postare = Post nou (['title' => 'hello world']) , 'corp' => 'acesta este corpul']); $ Manager-> persistă ($ post); $ Manager-> flush ();
"
După cum vedeți, clasa de corp ar trebui să pună în aplicare FixtureInterface
și ar trebui să aibă încărcare (ObjectManager $ manager)
metodă. Instrumentele Doctrine2 sunt clase PHP unde puteți crea obiecte și le puteți persista în baza de date. Pentru a ne autoliza setul de lucruri în Laravel, trebuie să modificăm composer.json
în rădăcina Laravel:
json ... "autoload-dev": "classmap": ["tests / TestCase.php", "teste / Fixtures.php" // adaugat aici], ...
Apoi rulați:
bash compozitor dump-autoload
Să creăm fișierul nostru de testare în directorul de teste DoctrineTest.php
.
"php namespace Test, folosiți aplicația, utilizați App \ Entity \ Post, utilizați Doctrine \ Common \ DataFixtures \ Executor \ ORMExecutor, utilizați Doctrine \ Common \ DataFixtures \ Purger \ ORMPurger; \ PostRepo;
clasa doctrineTest extinde TestCase private $ em; depozit privat de $; încărcător privat $; funcția publică setUp () părinte :: setUp (); $ this-> em = App :: make ("Doctrină \ ORM \ EntityManagerInterface"); $ this-> repository = PostRepo nou ($ this-> em); $ this-> executor = ORMExecutor nou ($ this-> em, new ORMPurger); $ this-> loader = încărcător nou; $ this-> loader-> addFixture (new Fixtures);
/ ** @test * / funcția publică funcțională () $ purger = new ORMPurger (); $ executor = ORMExecutor nou ($ this-> em, $ purger); $ Executor-> execute ($ this-> loader-> getFixtures ()); $ user = $ this-> repository-> PostOfTitle ("salut lume"); $ This-> Molodva> clară (); $ this-> assertInstanceOf ('Aplicație \ Entity \ Post', $ user); "
În înființat()
metodă, instanțiez ORMExecutor
și încărcătorul. De asemenea, încărcăm Programe
clasa pe care am implementat-o.
Nu uitați că /** @Test */
adnotarea este foarte importantă și fără aceasta, phpunit-ul va reveni Nu au fost găsite teste în clasă
eroare.
Pentru a începe testarea în rădăcina proiectului nostru, trebuie doar să executați comanda:
bash sudo phpunit
Rezultatul ar fi:
"bash PHPUnit 4.6.6 de Sebastian Bergmann și colaboratori.
Configurația a fost citită de la /var/www/html/laravel/phpunit.xml. Timp: 17.06 secunde, Memorie: 16.00M OK (1 test, 1 afirmație) "
Dacă doriți să împărțiți obiecte între fișiere, este posibil să adăugați cu ușurință o referință la obiect după nume și apoi să o referiți pentru a forma o relație. Iată un exemplu:
"Testarea spațiului de nume php, folosiți Doctrine \ Common \ Persistence \ ObjectManager; utilizați Doctrine \ Common \ DataFixtures \ FixtureInterface; utilizați aplicația \ Entity \ Post;
clasa PostFixtures implementează FixtureInterface / ** * Încărcați fișierele utilizatorului * * @param ObjectManager $ manager * @return void * / încărcare funcțională publică (ObjectManager $ manager) $ postOne = Post nou (['title' => , 'corp' => 'acesta este corpul']); $ postTwo = Post nou (['title' => 'hello there', 'body' => 'acesta este corpul doi']); $ Manager-> persistă ($ postOne); $ Manager-> persistă ($ postTwo); $ Manager-> flush ();
// stocarea referinței la rolul admin pentru relația Utilizator cu rolul $ this-> addReference ('new-post', $ postOne); "
și componenta Comentariu:
"Testarea spațiului de nume php, folosiți Doctrine \ Common \ Persistence \ ObjectManager; utilizați Doctrine \ Common \ DataFixtures \ FixtureInterface; utilizați aplicația \ Entity \ Post;
Class CommentFixtures implementează FixtureInterface / ** * Încărcați fișierele utilizatorilor * * @param ObjectManager $ manager * @return void * / încărcare funcțională publică (ObjectManager $ manager) $ comment = nou Comentariu (['title' => , 'email' => '[email protected]', 'text' => 'frumos post']); $ Comment-> setPost ($ this-> getReference ( 'nou-post')); // încărcați referința stocată $ manager-> persist ($ comment); $ Manager-> flush (); // magazin referință la post nou pentru Comentariu relație la post $ this-> addReference ('new-post', $ postOne); "
Cu două metode de getReference ()
și setReference ()
, puteți partaja obiecte între elementele de fixare.
Dacă ordonarea programelor este importantă pentru dvs., puteți să le comandați cu ușurință getOrder
în cadrul programelor dvs., după cum urmează:
funcția publică php getOrder () return 5; // numărul în care ordine de încărcare a dispozitivelor
Observați că ordonarea este relevantă pentru clasa Loader.
Unul dintre lucrurile importante despre programare este capacitatea lor de a rezolva problemele de dependență. Singurul lucru pe care trebuie să-l adăugați este o metodă în dispozitivul dvs., așa cum am făcut mai jos:
php funcția publică getDependencies () return array ('Test \ CommentFixtures'); // fixarea clasei de fixare depinde de
Aceasta este doar o descriere a testului de dezvoltare cu Laravel 5 și PHPUnit. La testarea depozitelor, este inevitabil să apăsați baza de date. În acest caz, doctrinele sunt importante.