6. Acceptance Testing
Driven Development
Atenia business
Scrise de 樽ntreaga
echip
pentru toat echipa
Testele pic p但n este
implementat story-ul
Test Driven
Development
Atenia partea
tehnic
Scrise de developeri
pentru developeri
Testele pic p但n este
implementat
funcionalitatea
7.
Ambele sunt scrise 樽naintea codului aplicaiei
Arat foarte similar
... Dar nu se pot substiti una pe cealalt
8. Story
Title: Customer pays bills
through internet banking
As a customer,
I want to pay bills through
internet banking,
So that I dont have to make a
trip to each supplier.
Scenario 1
Scenario 1: There is enough
credit
Given the account is in credit
And the user is properly
authenticated
When the customer attempts
to make a payment to a supplier
And he inputs the correct bill
details
Then ensure the transaction is
recorded
And ensure the amount of
money is debited
9. HAMCREST
http://hamcrest.org
Hamcrest it is not a
testing library: it just
happens that matchers are
very useful for testing.
Permite scrierea codului
樽ntr-un limbaj aproape
natural
Anagram de la
matchers
LAMBDAJ
http://code.google.com/p/l
ambdaj/
Acceseaz colecii fr
bucle (for, while etc.)
Operaii:
filtrare, conversie, sortare, i
nvocare de metode etc.
10.
JUnit
Clarity
assertEquals(a, 3);
assertThat(a, is(3));
Hamcrest
Speed
Not necessarily applicable for isNull() or isNotNull()
assertThat(list, hasItems(banana, minion, unicorn));
11.
Core
is
Logical
allOf - like Java &&
anyOf - like Java ||
not
Object
equalTo - test object equality using Object.equals
notNullValue, nullValue - test for null
12. Collections
hasEntry, hasKey, hasValue - test a map contains an entry, key or value
hasItem, hasItems - test a collection contains elements
Number
closeTo - test floating point values are close to a given value
greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - test
ordering
Text
equalToIgnoringCase
containsString, endsWith, startsWith - test string matching
23. Lizibilitate
Coleciile sunt foarte comune
Iteraiile nu sunt extraordinar de simple
...i sunt greu de citit
Operaii lambdaj: conversie, filtrare, sortare, extragere etc.
#4: Cristian Cooin urmtoarele 40 de minute, v voi vorbi despre cum s scriem teste automate rapid i care sunt i uor de citit i 樽neles at但t pentru testeri c但t i pentru ceilali colegi de echip.Pentru 樽nceput, ca o persoan curioas, a vrea s tiu c但i dintre voi:- Deja scriu teste automate- Nu scriu, dar 樽i doresc s 樽nveePe l但ng aspectele tehnice ale acestei prezentri, v voi explica i c但teva principii Agile i motivul pentru care sunt str但ns conectate cu cele 2 librrii.Metodologia Agile a cptat amploare i treptat modul de dezvoltare software s-a adaptat. Una dintre principiile Agile este c fiecare are capacitatea de a se implica 樽n aproape orice task al echipei, atunci c但nd este necesar.Acest lucru nu este tocmai aplicabil dac ne g但ndim la project manageri care s scrie cod, dar acelai lucru nu este neaparat valabil dac vorbim despre project manageri care s scrie teste.
#5: Voi explica puin ce 樽nseamn BDD i care este legtura lui cu metodologia Agile.......i nu 樽n ultimul r但nd, de ce am folosi aceste librrii.
#6: BDD a evoluat din practicile agile i a fost conceput pentru a le face mai accesibile i eficiente pentru echipele de dezvoltare. Iar prin echipe de dezvoltare m refer la 樽ntreaga echip, nu doar programatorii.Principalul beneficiu al BDD este capacitatea de a scrie testele 樽ntr-un limbaj accesibil tuturor membrilor echipei.Iar aceasta se face prin intermediul povetilor i scenariilor.i ca s 樽nelegei la ce m refer un story are urmtoarea structur:As a...X reprezint o persoan, Y reprezint o funcionalitate iar Z reprezint un beneficiu obinut prin implementarea funcionalitii. Aceast abordare are capacitatea de a defini valoarea unei funcionaliti 樽nc 樽nainte de a fi implementat. Dac nu este astfel definit atunci exist riscul de a implementa o funcionalitate de tipul pentru-c-aa-vrea-clientul. Aici este momentul 樽n care unele cerine mistice sunt filtrate corespunztor.Exemplu...
#7: Exist 2 implementri ale BDD 樽n momentul de fa: ATDD i TDD
#9: Ca un studiu de cazam avea un story pentru achitarea facturilor prin internet banking.Iar un scenariu `happy flow` ar fi
#10: Deci la ce am putea folosi hamcrest i lambdaj?n c但teva cuvinte....Hamcrest nu este o librrie de testare. Pur i simplu este foarte util pentru testare.Pe celalt parte, lambdaj permite accesarea coleciilor fr bucle
#11: De ce a vrea s scriu verificrile cu hamcrest?n primul r但nd pentru claritate. De exemplu, prima variant reprezint expresia clasic de verificare a unei variabile metod JUnit.Cea de-a doua este scris folosind metodele hamcrest.Diferena aceasta nu este foarte mare atunci c但nd analizm doar o linie, dar face o diferen foarte mare 樽n momentul 樽n care avem c但teva zeci de verificri i elementele devin din ce 樽n ce mai complexe.n al 2-lea r但nd pentru vitez:E destul de simplu: assert that list has items banana, minion, unicorn
#13: Avem matchers pentru colecii, numere, textPentru numere poate prea o complicare inutil s scriu toat denumierea, dar o s v art peste c但teva slide-uri un exemplu care s v explice de ce este mai bine.
#14: Dac vom dori s folosim hamcrest, trebuie s declarm acest import static
#20: i un exemplu de cod dintr-un test, unde se verific dac 樽ntr-un blog, 樽n lista de articole afiate exist i ultimul articol creat de noi (mai exact de codul de testare).
#22: Dac vom dori s folosim i hamcrest 樽mpreun cu lambdaj, trebuie s declarm acest import static.
#23: LambdaJ, foarte pe scurt:E folosit pentru manipularea coleciilorPoate folosi hamcrest pentru matching
#24: Coleciile sunt foarte des folosite 樽n cod, dar lucrul cu ele nu este extraordinar uor, iar citirea codului nici at但t.De c但te ori nu vi s-a 樽nt但mplat s revenii asupra unui cod scris de voi cu c但teva luni 樽n urm i s nu reuii s 樽nelegei cum funcioneaz?Dar pe codul unui coleg? i nu m refer aici la c但teva laboratoare de facultate cu 10 linii de cod, ci la proiecte cu c但teva mii de linii cod.
#27: You can read this like:select from family items havinglast nameequal to `Papoi`
#28: You can read this like:select from family items havinglast nameequal to `Papoi`
#29: The current implementation of forEach cannot handle null or empty collections this will just throw an exception.The same is true for a final class that is used with on()On average it is about 2-3 times slower, but depending on the collection it sometimes can be 6 times slower.