Programe - Testarea - un ghid complet pentru a Yii 2
Luminări (corpuri de limba engleză.) - este o componentă importantă a testului. Sarcina lor principală este de a pregăti mediul cu starea de pre-fix / cunoscut pentru a asigura repetabilitatea procesului de testare. Yii oferă un cadru care vă permite să se determine cu ușurință și cu precizie dispozitive de fixare și să le utilizeze în testele.
Conceptul-cheie în cadrul, programul Yii este așa-numitul obiect de fixare. Obiectul dispozitivului de fixare este un aspect special al mediului de testare, care este moștenit de la Yii \ test \ de prindere sau de moștenitorii săi. De exemplu, puteți utiliza UserFixture pentru a fi siguri că utilizatorii masa are un set bine-cunoscut de date. Încărcați una sau mai multe obiecte înainte de a începe testul de fixare și să le descarce după finalizarea.
Meci poate depinde de alte dispozitive de prindere, definite prin Yii proprietate \ test \ :: Meci $ depinde. Atunci când este încărcat dispozitivul de fixare, dispozitivul de fixare pe care aceasta depinde sunt descărcate automat de ea, iar atunci când ea descarcă toate corpurile de iluminat dependente vor fi descărcate după el.
Codul de mai jos arată cum să declare un model de prindere ActiveRecord utilizator. care corespunde tabelului de utilizator.
Sfat: fiecare ActiveFixture conceput pentru a pregăti tabelele bazei de date pentru testare. Puteți specifica tabelul ca proprietate prin Yii \ test \ ActiveFixture :: $ tableName. și prin Yii proprietate \ test \ ActiveFixture :: $ modelClass. În cazul în care acesta din urmă, atunci numele tabelului va fi luată de la modelul ActiveRecord. specificate în modelClass.
Notă: Yii \ test \ ActiveFixture folosit doar pentru baze de date relaționale. Pentru NoSQL Yii oferă următoarele clase de soluții ActiveFixture:
Datele pentru ActiveFixture de prindere, de obicei, sunt FixturePath / date / fișier TableName.php
în cazul în care punctele FixturePath la directorul în care dispozitivul de fixare este un fișier de clasă, și numele tabelului Nume_tabelă cu care este asociat. Pentru exemplul de mai sus, datele ar trebui să fie în fișierul @ app / teste / corpuri / date / user.php. Acest fișier trebuie să returneze o serie de rânduri de date care urmează să fie introduse în tabelul de utilizator. de exemplu
Puteți seta o linie alias în viitor, vă puteți referi la acesta în testele. In exemplul de mai sus două rânduri au aliasuri user1 și USER2. respectiv.
De asemenea, nu trebuie să specificați datele pentru coloanele cu auto-increment. Yii va completa automat datele din coloana de valoare la momentul sarcinii de prindere.
Sfat: puteți specifica o cale către fișierul de date prin Yii proprietate \ test \ ActiveFixture :: $ DATAFILE. Puteți înlocui, de asemenea, o metodă de Yii \ test \ ActiveFixture :: getData (). pentru a furniza datele.
Așa cum am descris mai devreme, prindere poate depinde de alte corpuri. De exemplu, poate fi necesar să se UserProfileFixture dependența UserFixture deoarece tabela de profiluri de utilizator conține o cheie străină care indică masa de utilizator. Dependența este indicată prin Yii proprietate \ test \ :: Meci $ depinde. ca și în cele ce urmează
Dependența se asigură, de asemenea, că corpurile sunt încărcate și descărcate într-o anumită ordine. În exemplul anterior UserFixture vor fi descărcate automat pe UserProfileFixture. garantând astfel existența tuturor cheilor străine, și vor fi descărcate după UserProfileFixture ejectat din aceleași motive.
Utilizarea luminări
Dacă utilizați Codeception pentru testarea codului, ar trebui să ia în considerare utilizarea extensia yii2-codeception. care a construit-in-suport pentru încărcare de prindere și accesul la acestea. Dacă utilizați un cadru de testare diferite, puteți utiliza Yii \ test \ FixtureTrait în testele în acest scop.
În continuare, vom descrie modul de a scrie un test de unitate pentru un model de clasă USERPROFILE folosind o expansiune yii2-codeception.
Declarați ce luminări pe care doriți să utilizați corpuri () metoda de testare unitate de clasă, moștenită de la Yii \ codeception \ DbTestCase sau Yii \ codeception \ testcase. De exemplu,
Programe enumerate în metoda de corpuri () vor fi descărcate automat înainte de fiecare metodă de testare caz de testare și descărcate după încheierea fiecărei metode de testare. Și, așa cum am descris mai devreme, atunci când este încărcat de fixare, toate corpurile de iluminat sale dependente sunt încărcate automat în primul rând. In exemplul de mai sus, în cazul în care oricare dintre aceste metode de testare în cazurile de test secvențial vor fi încărcate două corpuri: UserFixture și UserProfileFixture. deoarece UserProfileFixture depinde UserFixture.
Pentru a determina corpurile în corpurile () metodă, puteți utiliza fie numele unei clase, sau o serie de setări. Cu o serie de setări puteți personaliza proprietățile de fixare să fie instalat atunci când este încărcat.
Aveți posibilitatea să atribuiți, de asemenea, un alias de prindere. In exemplul de mai sus, profile este un UserProfileFixture alias prindere. Folosind un alias, puteți obține obiectul de prindere în metodele de testare. De exemplu, $ this-> profilurile UserProfileFixture a reveni obiect.
Deoarece UserProfileFixture moștenit de la ActiveFixture. Puteți utiliza, de asemenea sintaxa următoare pentru a avea acces la date corpuri:
Info: $ this-> profile continuă să fie un obiect al clasei UserProfileFixture. Aceste caracteristici sunt puse în aplicare prin acces PHP tehnici magice.
Definirea și utilizarea luminări globale
Fixture descrise mai sus sunt utilizate în principal în cadrul anumitor cazuri de testare. În cele mai multe cazuri, va trebui, de asemenea, fikstry la nivel mondial, care sunt folosite în toate sau cele mai multe cazuri de testare. Un exemplu este un dispozitiv de Yii \ test \ InitDbFixture. care face 2 lucruri:
- Execută script-ul @ app / teste / corpuri / initdb.php pentru a efectua o serie de initializare a mediului de testare a sarcinilor comune;
- Dezactiveaza de verificare a integrității datelor înainte de a descărca corpurile rămase și include spatele după ce toate celelalte corpuri sunt descărcate.
Folosind un dispozitiv la nivel mondial similar cu utilizarea de non-globale. Singura diferență este că ar trebui să declare aceste corpuri în Yii metoda \ codeception \ testcase :: globalFixtures (). în schimb program (). În cazul în care caz-test încarcă dispozitive de prindere, încărcate în primul rând de prindere la nivel mondial, atunci tot restul.
În mod implicit, dispozitivul de fixare are InitDbFixture obyavlena globalFixtures metoda () clasa Yn \ codeception \ DbTestCase. Acest lucru înseamnă că ar trebui să funcționeze numai cu fișier @ app / teste / luminări / initdb.php. dacă doriți să înainte de fiecare test efectuat anumite lucrări pregătitoare. În caz contrar, vă puteți concentra doar pe dezvoltarea de cazuri de testare specifice și program aferente.
Organizarea claselor de program și fișierele de date
Astfel veți evita conflictele de fișiere de date de prindere între testele și le va folosi ca ai nevoie.
Notă: în exemplul de mai sus, fișierele de date de prindere, astfel numit ca doar un exemplu. În viața reală, ar trebui să se refere la ele, în conformitate cu cea a unei clase moștenește de prindere clasei. De exemplu, atunci când moștenesc de la Yii \ test \ luminări ActiveFixture pentru baza de date ar trebui să utilizați numele tabelului ca numele fișierului de date; moștenire de la Yii \ MongoDB \ ActiveFixture dispozitive de fixare pentru MongoDB, ar trebui să utilizați numele colecției ca numele fișierului.
Puteți utiliza o ierarhie similară de a organiza fișiere de clasă corpuri. Pentru a evita un conflict cu fișierele de date pot fi utilizate ca corpuri de directorul rădăcină în loc de date.
rezumat
Notă: Această secțiune este în construcție.
Mai sus, am descris modul de a declara și de a folosi dispozitivul de fixare. Mai jos este un script de probă care rulează teste unitare asociate cu baza de date:
- Utilizați Yii migra comandă pentru a actualiza baza de date de testare la cea mai recentă versiune;
- Pornește caz test:
- Se incarca de prindere: curățare tabelele bazei de date corespunzătoare și să le umple cu corpurile de iluminat de date;
- Test de execuție;
- Descarcarea dispozitivele de fixare.
- repetarea pasul 2 până la momentul până când ați terminat toate testele.
Notă: Această secțiune este în construcție.
todo: această secțiune pot fi combinate cu părțile anterioare test-fixtures.md
Programe sunt o componentă importantă a testului. Sarcina lor principală este de a furniza un set de date necesare pentru a testa diferite scenarii ale aplicației. Cu aceste date, utilizarea testelor dumneavoastră sunt mai eficiente și utile.
Yii sprijină program prin intermediul liniei de comandă de prindere Yii utilitate. Acest utilitar acceptă:
- Se încarcă în diferite corpuri de magazine, cum ar fi: RDBMS, NoSQL, și altele;
- Descarcarea de prindere în moduri diferite (de obicei curăță depozit);
- generarea automată a luminări și umplându-le cu date aleatoare
Corpuri de format
Programe - sunt obiecte cu diferite metode și configurații, pe care le puteți citi în documentația oficială.
Să presupunem că avem următorul set de date de fixare pentru a descărca:
Descărcați luminări
luminări Clasa de fixare trebuie să conțină un sufix. În mod implicit căutarea se realizează în spațiul de corpuri de teste Nume \ unitate \ luminări. dar puteți schimba acest comportament printr-un fișier de configurare sau parametri ai comenzii. Puteți elimina unele dintre luminări de încărcare sau descărcare de adăugare - în fața numelui lor, de exemplu -User.
Pentru a descărca un dispozitiv, executați următoarea comandă ::
Punct fixture_name Necesar la numele de prindere care trebuie să fie descărcate. Puteți descărca mai multe corpuri de la un moment dat. Mai jos sunt exemple de utilizare corectă a acestei comenzi:
Corpuri de descărcare
Pentru a descărca de prindere, executați următoarea comandă:
Când descărcarea luminări, puteți utiliza, de asemenea, spațiul de nume și parametri globalFixtures.
Comenzile de configurare globală
Deși parametrii liniei de comandă și ne permit să personalizați comanda de migrare de pe zbor, uneori, poate fi necesar să configurați comanda o singură dată pentru toate script-urile care rulează. De exemplu, puteți configura moduri diferite de a depune un accesoriu în exemplul de mai jos:
generarea automată de corpuri
Yii poate, de asemenea, genera automat pentru dvs. luminări bazate pe un șablon. Puteți genera un dispozitiv cu un set diferit de date în limbi diferite și în diferite formate. Această caracteristică se bazează pe utilizarea și extinderea bibliotecii Faker yii2-falsificator.
Pentru mai multe informații, consultați manualul.