Testele de integrare maven

Rezumat: Deși Maven este instrumentul care standardizează structura proiectului și asamblarea acestuia, acesta nu a reușit să standardizeze tot felul de teste cu eșec. Zboruri SchA razberem.







Deci, de ce Maven nu reușește să standardizeze testele, la urma urmei:

  • Efectuată în faza de testare
  • Se află în directorul src / test
  • Numele claselor de testare conțin cuvântul Test
    • Efectuată în faza de testare a integrării
    • Se află în src / test
    • În numele lor ar trebui să fie scrisori IT care să indice corect testele de integrare.

Există mai multe probleme în acest sens:

Faza de testare a integrării se efectuează după testele unității, ceea ce înseamnă că acestea nu pot fi pornite separat. De fiecare dată când executăm teste de integrare, se fac module modulare. Cu toate acestea, de obicei, dorim să efectuăm teste unitare o singură dată, apoi să efectuăm separat teste de integrare. Se pare că testele unităților nu au fost efectuate, trebuie să le ignorăm folosind -DskipTests. apoi se dovedește că testele de integrare nu sunt de asemenea pornite, deoarece pluginul failsafe folosește surefire, începe hemoroizii cu crearea de profiluri și în cele din urmă începe să pară că toate acestea sunt prea complicate. Apropo, de ce este important pentru noi să efectuăm testele separat:

Dezvoltatorii pot obține rapid un feedback "verde" și pot continua să lucreze. Sunt teste modulare care pot da rapid un răspuns de bază.

Testele nemodulate depind de mediul înconjurător și, prin urmare, pot cădea. Dacă astfel de teste au scăzut, atunci este încă necesar să înțelegeți din cauza mediului sau, într-adevăr, logica sa stricat.

Testele de integrare sunt lente, în funcție de durata pe care pot fi executate pentru fiecare comitet, o dată pe zi, etc. De asemenea, ele pot fi împărțite în grupuri mai mici de teste, de exemplu, se efectuează mai întâi teste de bază ale fumului, apoi regresie, apoi acceptare, apoi încărcare etc. Este convenabil să le separăm pentru că vom ști exact ce este rupt. Și, de asemenea, putem conduce un anumit grup de teste separat și nu așteptați 4 ore pentru ca totul să treacă.

Este posibil să dorim să executați același sistem de mai multe ori. De exemplu, le-am alungat la comiterea curentă și apoi, din nou, după ce a fost acum o săptămână, pentru a vedea diferența dintre rezultate.

Pentru testele de sistem, de multe ori trebuie să pregătiți mediul înainte de a le rula.

În mod normal, failsafe utilizează directorul src / test. și rareori trebuie să punem testele și resursele de integrare și unitate în aceleași pachete.

Faza de testare a integrării rulează înainte de instalare de fiecare dată. Nu vrem să executăm teste de integrare lentă de fiecare dată când instalați un artefact într-un depozit local.

Din păcate, pentru majoritatea dezvoltatorilor, există doar teste de integrare modulare și "ce face QA". Cu toate acestea, în realitate, testele sunt împărțite cel puțin modulare, sistemice și componente, în funcție de scală. Există, de asemenea, teste funcționale și nefuncționale etc. În detaliu, puteți vedea tipurile de testare în articolul cu același nume. Dar, cel mai important, este posibil să ne împărtășim toate aceste teste. Pentru unii, trebuie să ridicați întreaga aplicație, pentru alții - doar o parte, pentru a treia, în general, o clasă este suficientă. Cu toate acestea, Maven nu distinge între ele și nu le împărtășește, are modulare sau integrare.







În general, un pic de reflecție poate Priti la concluzia că, odată ce un Maven standard de mecanism atât de imperfect și totuși să nu fie în măsură să mențină toate necesare, ne putem muta departe de ea. În schimb, vă sugerăm să utilizați un plugin sigur pentru vechiul sistem sigur. Da, acest plugin este închis pentru scris teste de unitate, dar ele sunt, de fapt, nu diferă de „non-modulare“ - același JUnit / TestNG va descrie toate logica lor (desi aici, de asemenea, vă permite să folosiți tot felul de cadre BDD navrode JBehave dar nu și despre vorbirea lor. ).

Deci așa va arăta. Pentru fiecare tip de testare, vom crea a) un profil b) un director cu surse și resurse. Configurarea aceluiași Maven va fi după cum urmează:

Rețineți că într-o configurație relativ mică, am descris 3 tipuri de teste și toate sunt în directoare diferite:

Modular: test mvn

Componenta: test mvn - test de componente

Sistem: test mvn - test de sistem

Structura directorului este următoarea:

Adevărat, testele de sistem tind să aibă sens în module separate, atomi și proiecte.

Singurul lucru pe care l-am mințit: faza testelor de integrare este împărțită în mai multe etape, ceea ce ne permite să ridicăm mai întâi mediul și apoi să îl oprim. Abordare cu siguranța acest lucru nu va fi, va trebui să porniți manual mediul utilizând comenzi specificate în mod explicit. Cu toate acestea:

Dacă avem nevoie de un mediu complet desfășurat, atunci nu este întotdeauna posibilă automatizarea fără scrierea de scripturi, ceea ce înseamnă că în majoritatea cazurilor va fi totuși necesar să-ți tragi mâinile

Dificultatea de configurare a diferitelor teste se suprapune cu complexitatea rularea unor tomcaturi: începeți

pentru că de obicei, testele de sistem sunt efectuate în module sau proiecte separate, atunci este foarte posibil să se utilizeze faza de testare a integrării ca fiind singura care începe testele.

Dar dacă doriți cu adevărat să automatizați desfășurarea mediului într-un mod convenabil, este posibil să fiți în măsură să configurați faza de testare a integrării pentru aceasta.

JUnit Categorii, Grupuri TestNG

Problema este identificată corect dar nu rezolvată prin mijloace, profilurile sunt folosite aici în mod eronat deoarece:

Acum, este imposibil de a asambla rula simultan ambele teste unitare și de integrare, precum și modul în care un script construi este cel mai omniprezent, ansamblul de pe serverul construi ar trebui să fie pentru a rula toate testele, și motivul pentru care dorim să ruleze teste de integrare, fără rularea testelor de unitate poate fi doar unul: în codul nici o problema, nu efectua teste de integrare pentru că am pregătit un kit de testare de rău, cum ar fi să nu mutat pe actualizarea schemei de bază, sau au pregătit seturi de date greșite pentru dbunit. Dar, în cazul în care testele de integrare a găsit un bug real în codul pe care ei nu au în nici un caz nu poate fi rulat fără teste unitare, deoarece, în primul rând avem o mare problemă în testele unitare, acestea sunt incomplete, deoarece eroarea proshlyapili, a doua procedură în sine corecta eroarea atunci când agil este că la început este necesar să se scrie un test de unitate care să dezvăluie faptul că eroarea este și numai apoi să facă corecții la cod. Situația în care vrem să rulam o unitate de testare fără a lansa integrarea este da, este reală și voi arăta mai jos cum să ajungi în jurul ei.

Nu este clar cum va arăta ca în IDE, în conformitate cu abordarea propusă, vom în același timp sub controlul compilatorului și alte validatori un singur dosar cu testele, să editați testele de cod și de unitate și teste de integrare pe care le vedem că acest cod nu mai compilează.

Acum, ca de obicei, distribuesc o unitate și teste de integrare pentru diferite faze:

Testele de integrare sunt pur și simplu introduse în integrare și nu deranjează la faza unității de testare, atât în ​​fapt, cât și la rândul său. După cum se poate observa din unitatea implicită, testele sunt întotdeauna executate, ceea ce pare să fie logic, dar putem să le ignorăm prin setarea proprietății skip.unittest la true dacă avem nevoie.

P.S. După cum puteți vedea a fost folosit kung fu pentru a lansa unul și același pluginului mai multe faze, astfel încât este ușor să ne imaginăm că putem avea nu doar două, ci chiar mai mult faza de testare în cadrul proiectului, cum ar fi unitate, integrare, funcțională, acceptarea pur și simplu prin configurarea plugin-ul pentru a rula în diferite faze.

Dacă toate la fel, ar fi de dorit pentru a rezolva problema este prin profilurile, și nimic altceva, de exemplu, în special în proiectul dumneavoastră, indiferent de motiv, este rezonabil, este mai profitabil pentru a manipula elementul „include“ în locul elementelor „testResources“ și „testSourceDirectory“, pentru că în fața noastră, inițial este o problemă care testează pentru a rula, elementul „include“ dă un răspuns direct și lipsit de ambiguitate la întrebarea fără a interfera cu IDE compilator codul de test pentru a verifica și de a verifica resursele validatori active de testare.







Articole similare

Trimiteți-le prietenilor: