際際滷

際際滷Share a Scribd company logo
Writing quick and beautiful automation code
Writing quick and beautiful automation code
Introduction to Hamcrest and LambdaJ
Cristian Cooi
1. BDD (Agile)

2. Ce este hamcrest
3. Ce este lambdaj
4. Beneficii
Ce este BDD

Stories & Scenarios

As a [X]
I want [Y]
So that [Z]
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




Ambele sunt scrise 樽naintea codului aplicaiei
Arat foarte similar
... Dar nu se pot substiti una pe cealalt
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
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.




JUnit
Clarity
 assertEquals(a, 3);
 assertThat(a, is(3));
Hamcrest
Speed
 Not necessarily applicable for isNull() or isNotNull()
 assertThat(list, hasItems(banana, minion, unicorn));





Core
 is
Logical
 allOf - like Java &&
 anyOf - like Java ||
 not
Object
 equalTo - test object equality using Object.equals
 notNullValue, nullValue - test for null
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
Imports


hasItem, hasItems

Varianta
clasic


hasItem, hasItems
Folosind
hamcrest


hasItems (c但nd verificarea p庄界)


hasEntry, hasValue, hasKey


Numbers


Tiny automation code


ntrebri?
Imports



Este conceput pentru manipularea coleciilor
Poate folosi Hamcrest pentru matching
Lizibilitate
 Coleciile sunt foarte comune
 Iteraiile nu sunt extraordinar de simple
 ...i sunt greu de citit
 Operaii lambdaj: conversie, filtrare, sortare, extragere etc.


Comparaii matematice (cu hamcrest)

 Sume


Invocarea unei metode

Varianta
clasic
Folosind
LambdaJ


Select


Select


Cel mai t但nr Papoi
Writing quick and beautiful automation code




Colecii Null sau goale 樽n forEach
Clase finale
Very large collections


ntrebri?








Integrare cu metodologiile Agile (BDD)
Claritate
Vitez
Curb de 樽nvare rapid
Aplicaii numeroase



Cristian Cooi  SDET
cotoic@amazon.com




Hamcrest
 http://code.google.com/p/hamcrest/wiki/Tutorial
 http://edgibbs.com/junit-4-with-hamcrest/
 http://rafaelnaufal.com/blog/2010/03/15/using-hamcrest-and-junit/ writing your own matchers
LambdaJ
 http://code.google.com/p/lambdaj/
 http://code.google.com/p/lambdaj/wiki/LambdajFeatures

More Related Content

Writing quick and beautiful automation code

Editor's Notes

  • #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
  • #12: Ce ne ofer hamcrest ca
  • #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.