În acest post vom discuta despre exemple de teste unitare care testează clasa de performanță pentru punerea în aplicare a echipelor virtuale în magazinul de pe 1C-Bitrix. Voi descrie funcționarea funcțională a echipelor virtuale precum și o privire mai atentă la codul PHPUnit-test pentru a testa.
Ce este PHPUnit
PHPUnit - este un cadru pentru unitatea de testare în proiecte PHP. El este reprezentantul familiei de cadre xUnit bazate pe pachet Sunit mărturisite Kent Beck. PHPUnit dezvoltat de programatorul german Sebastian Bergmann.
PHPUnit a fost creat din punct - cu atât mai repede veți găsi erori în cod, cu atât mai repede le puteți repara. La fel ca toate cadrele unitate de testare PHPUnit folosește afirmația pentru a testa comportamentul unității de testare de cod se comportă conform așteptărilor.
PHPUnit oferă programator cu următoarele caracteristici:
- Instrumente pentru crearea de teste unitare și organizarea acestora în seturi ierarhice.
- interfață linie de comandă pentru testare
- furnizori de date - generatoare de date de testare pentru a testa, ca singurul test se comporta pe diferite date de intrare.
- suport cod de test cu ajutorul bazei de date.
- Capacitatea de a testa excepții.
- Suport pentru așa-numitele obiecte virtuale
- generator de rapoarte
- Integrarea cu instrumentul RC Seleniu pentru interfețele de utilizator de testare
PHPUnit fără probleme vă permite să testați site-urile bazate pe Bitrix cadru. Înainte de a continua lectura, recomand să citiți articolul meu. care descrie modul de a face prieteni și 1C Bitriks PHPUnit.
Unele funcționalități vor fi testate
Să presupunem că avem o sarcină pentru a acoperi testele funcționalitatea grupurilor virtuale, care este implementat ca o clasă. Conceptul de grupuri virtuale discutate în detaliu în acest articol - magazin virtual online de bandă de la 1C-Bitrix. Pe scurt - plantăm în secțiunea de catalog în care mărfurile „fizic“ nelegat. Putem umple aceste partiții virtuale folosind proprietățile speciale ale umpluturii, care are la bază de filtru și mărfuri apar în ea pe zbor. Ea are multe avantaje și permite flexibilitatea de a adăuga noi secțiuni pentru a promova magazinul păstrând în același timp structura de bază a catalogului.
Mai departe la detaliile tehnice. Funcționalitatea este destul de complicată și lucrul acesta depinde de mulți factori care sunt dificil de a verifica manual dacă apare o eroare. Teste auto poate rezolva această problemă și va arăta rapid în cazul în care în codul este ceva greșit. Funcționalitatea se bazează pe secțiunile de proprietate personalizate în care umple regulile de determinare a mărfurilor incluse în grupul curent virtuale. Avem, de asemenea, metode care prelua aceste proprietăți și de a construi o CIblockElement metodă de filtrare :: GetList (). care primește mărfurile care corespund normelor specificate. Partiția virtuală poate colecta bunuri pentru cele două tipuri de setări: prin legarea la alte secțiuni în blocul de informații și proprietățile produsului de legare. Astfel, legarea de secțiuni multiple și proprietăți și pot specifica logica (AND / OR) pentru raportul dintre secțiunile și elementele sunt în mod corespunzător. Conform acestei există unele metode care sunt filtrele acestor tipuri de setări.
Parsează exemple de teste unitare
Pentru a testa întreaga funcționalitate a acestei noi am scris despre o duzină de teste, să le analizăm. Primul test - cel mai de bază, și nu contează cât de banal nu a fost, noi credem că este necesar. Condiția esențială pentru grupurile virtuale - este, în primul rând, prezența modulului instalat în blocul de informații de sistem. Se poate testa un astfel de test:
În continuare, trebuie să verificați dacă toate proprietățile dorite ale utilizatorului în sistem. Acest lucru se poate face în încercarea de a face o selecție din date proprietățile codului de caractere folosind API 1C-Bitrix
Acest test are o fundamentală, în funcție de numărul de alte teste pe ea, pe care le voi descrie mai jos. Ie acestea trebuie să fie efectuate numai cu condiția ca testCatalogSectionHasNeededUserProps () este de succes, altfel nu are sens să le verifice.
Următoarele 2 teste verifica dacă metodele de lucru corecte pentru extragerea identificatorii de pavilion și / sau proprietăți ale secțiunilor și elementele (necesare pentru logica internă funcțională). Metodele de testare sunt numite în constructor și să stocați identificatorii de valori de proprietate de utilizator în proprietățile obiectului. Aceasta înseamnă că sarcina de testare manual pentru a obține corecte valorile de proprietate utilizatorului ID-uri, pentru a le lua ca standard, pentru a crea o instanță de testare a clasei și verificați proprietățile dorite ale obiectului pentru conformitatea cu standardul. Iată cum arată:
Notă metodele de adnotare - @depends testCatalogSectionHasNeededUserProps. Acest rezumat furnizat de PHPUnit și stabilește o regulă care un test specific ar trebui să fie efectuată numai în cazul în care testul în funcție specificat a fost de succes.
În continuare avem nevoie pentru a testa ca și constructe efectuate dacă ați trece un parametru de intrare nevalid. În cazul nostru, aceasta ar trebui să arunce o excepție de excepțiile de bază - Excepție. Acest lucru poate fi verificat cu ajutorul încorporat adnotări @expectedException. ca aceasta:
Următorul pas - verificarea metodelor care construiesc filtrul și returnați-l la codul de client. Pentru a efectua aceste teste, trebuie să folosim obiect de clasa de test Mocha. Mocha (Engl Mock.) - Acest obiect fals special care permite în acest caz, pentru a simula primirea de date dintr-o secțiune sursă externă. Testul nostru nu ar trebui să depindă de un anumit set de partiții virtuale de informații într-o bază de date, pentru aceasta substituim (Simulate) extragerea efectivă a matrice din baza de date a presetarea statice direct în matrice de cod.
Deoarece această machetă obiect fictiv vom avea nevoie de câteva teste - l-am făcut într-o metodă protejată. test de executie PHPUnit nu va lua în considerare această metodă un test și nu va încerca să-l execute. Aici este codul pentru această metodă:
Testul următor cu utilizarea de machetă obiect verifică dacă metoda determină care secțiune a fost transmisă constructorului la intrare: real sau virtual:
Pentru a testa metoda, care construiește un filtru, trebuie să verifice dacă este în sine invocă cel puțin o dată metodele privind construcția filtrului în părți (legare la secțiuni și proprietățile elementelor):
De asemenea, extrem de important ca matrice rezultat cu un filtru returnează VIRTUAL_GROUP cheie. din moment ce utilizează codul de client-side. Aici este un test care verifică timpul:
Iată câteva teste care verifică metodele interne ale clasei de test. Ce comportament pot fi înțelese din verificarea Afirmați-metode:
PHPUnit - un instrument puternic, care elimină verificarea încrucișată manual multe setări posibile atunci când apare o eroare. Având la îndemână o unitate de teste putem face în condiții de siguranță o schimbare în clasa de test, adăugați și să extindă funcționalitatea, în același timp, asigurați-vă că noile noastre schimbări de comportament fără rupere, care se așteaptă la un cod de client clasă.
Sunt sigur că codul de acoperire teste pe care scrie, nu vin doar înapoi la tine în termeni de economie de timp în greutate atunci când depanare site-ul dvs. și căutați eroarea care a avut loc. În dezvoltarea grupelor funcționale ale testelor virtuale de mai multe ori a subliniat la noi pe greșelile făcute în integrarea noilor evoluții, ceea ce a permis dreptul de a determina și de a rezolva problema, astfel că testele de scris este o investiție bună calitatea proiectului.