KEMBAR78
Writing quick and beautiful automation code | PPTX
Writing quick and
beautiful
automation code
Introduction to Hamcrest and Lambdaj
Cristian Coțoi
May 20 2013
•BDD (Agile) has new needs
•What is hamcrest
•What is lambdaj
•Improvement
Agenda
2
IN YOUR ZONE
Purpose
3
•http://hamcrest.org
•“Hamcrest it is not a testing library:
it just happens that matchers are
very useful for testing.”
•Matching allows writing of lines that
are close-to natural language
•Anagram of “matchers”
•http://code.google.com/p/lambdaj/
•Access collections without explicit
loops
•Operations include: items
filtering, converting, sorting, method
invoking, concatenate etc.
Hamcrest Lambdaj
IN YOUR ZONE
Why Hamcrest
4
•Clarity
•assertThat(a, is(“3”));
•assertEquals(a, “3”);
•Speed
•Not necessarily applicable for isNull() or isNotNull()
•assertThat(list, hasItems(“banana”, “paple”, “papoi”));
IN YOUR ZONE
Hamcrest (some of the common matchers)
5
•Core
• is
•Logical
• allOf - like Java &&
• anyOf - like Java ||
• not
•Object
• equalTo - test object equality using Object.equals
• notNullValue, nullValue - test for null
IN YOUR ZONE
Hamcrest (some of the common matchers)
6
•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
IN YOUR ZONE
Hamcrest
7
Imports
IN YOUR ZONE
Hamcrest Examples
8
•hasItem, hasItems
IN YOUR ZONE
Hamcrest examples
9
•hasItems (fail)
IN YOUR ZONE
Hamcrest examples
10
•hasEntry, hasValue, hasKey
IN YOUR ZONE
Hamcrest examples
11
•Numbers
IN YOUR ZONE
Hamcrest
12
•Actual automation code example
IN YOUR ZONE
Lambdaj
13
•It’s designed to easily manipulate collections.
•It uses Hamcrest matchers for filtering
IN YOUR ZONE
Why Lambdaj
14
•Readability
•Collections are very common
•Iterating over them is not dead-easy
•Loops are hard to read
•Operations for collections: Convert, Index, Filter, Sort, Extract
etc.
IN YOUR ZONE
Lambdaj examples
15
•Mathematical comparisons
•Mathematical operations
IN YOUR ZONE
Lambdaj examples
16
•Method invoke – add last name
IN YOUR ZONE
Lambdaj examples
17
•Select
IN YOUR ZONE
Lambdaj examples
18
•Youngest Papoi
IN YOUR ZONE
Lambdaj automation example
19
IN YOUR ZONE
Lambdaj limitations
20
•Null or empty collection in forEach
•Final class
IN YOUR ZONE
Benefits
21
•Integration with Agile methodologies (BDD)
•Clarity
•Speed
•Quick learning curve
•Extensive application
IN YOUR ZONE
Thank you
22
Cristian Coțoi| Senior Tester
IN YOUR ZONE
References
23
•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

Writing quick and beautiful automation code

  • 1.
    Writing quick and beautiful automationcode Introduction to Hamcrest and Lambdaj Cristian Coțoi May 20 2013
  • 2.
    •BDD (Agile) hasnew needs •What is hamcrest •What is lambdaj •Improvement Agenda 2
  • 3.
    IN YOUR ZONE Purpose 3 •http://hamcrest.org •“Hamcrestit is not a testing library: it just happens that matchers are very useful for testing.” •Matching allows writing of lines that are close-to natural language •Anagram of “matchers” •http://code.google.com/p/lambdaj/ •Access collections without explicit loops •Operations include: items filtering, converting, sorting, method invoking, concatenate etc. Hamcrest Lambdaj
  • 4.
    IN YOUR ZONE WhyHamcrest 4 •Clarity •assertThat(a, is(“3”)); •assertEquals(a, “3”); •Speed •Not necessarily applicable for isNull() or isNotNull() •assertThat(list, hasItems(“banana”, “paple”, “papoi”));
  • 5.
    IN YOUR ZONE Hamcrest(some of the common matchers) 5 •Core • is •Logical • allOf - like Java && • anyOf - like Java || • not •Object • equalTo - test object equality using Object.equals • notNullValue, nullValue - test for null
  • 6.
    IN YOUR ZONE Hamcrest(some of the common matchers) 6 •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
  • 7.
  • 8.
    IN YOUR ZONE HamcrestExamples 8 •hasItem, hasItems
  • 9.
    IN YOUR ZONE Hamcrestexamples 9 •hasItems (fail)
  • 10.
    IN YOUR ZONE Hamcrestexamples 10 •hasEntry, hasValue, hasKey
  • 11.
    IN YOUR ZONE Hamcrestexamples 11 •Numbers
  • 12.
    IN YOUR ZONE Hamcrest 12 •Actualautomation code example
  • 13.
    IN YOUR ZONE Lambdaj 13 •It’sdesigned to easily manipulate collections. •It uses Hamcrest matchers for filtering
  • 14.
    IN YOUR ZONE WhyLambdaj 14 •Readability •Collections are very common •Iterating over them is not dead-easy •Loops are hard to read •Operations for collections: Convert, Index, Filter, Sort, Extract etc.
  • 15.
    IN YOUR ZONE Lambdajexamples 15 •Mathematical comparisons •Mathematical operations
  • 16.
    IN YOUR ZONE Lambdajexamples 16 •Method invoke – add last name
  • 17.
    IN YOUR ZONE Lambdajexamples 17 •Select
  • 18.
    IN YOUR ZONE Lambdajexamples 18 •Youngest Papoi
  • 19.
    IN YOUR ZONE Lambdajautomation example 19
  • 20.
    IN YOUR ZONE Lambdajlimitations 20 •Null or empty collection in forEach •Final class
  • 21.
    IN YOUR ZONE Benefits 21 •Integrationwith Agile methodologies (BDD) •Clarity •Speed •Quick learning curve •Extensive application
  • 22.
    IN YOUR ZONE Thankyou 22 Cristian Coțoi| Senior Tester
  • 23.
    IN YOUR ZONE References 23 •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

Editor's Notes

  • #3 There is a new trend in BDD that empowers every member of the team to make changes in the code of the application & testing, starting with how the stories are connected with the code and should also be taken deeper.Hamcrest and lambdaj are 2 such libraries that make the code more human readable and easier to understand.
  • #5 So why would I want to write assertions like this?ClarityassertThat() is a replacement for the traditionalassertEqual that is focused more on specifications than on BDDFirst one reads: “assert that a is 3”. The second reads “assert equals a (and) 3”SpeedThis is pretty str8 forward: “assert that list contains ‘banana’, ‘paple’, ‘papoi’”
  • #15 Collections are hard to interrogate, especially when read from an outside source.It is easy to write a loop, but not so very easy to extract things from that loop or perform conversions or other operations on the items in the loop.
  • #18 You can read this like:select from family items having…last nameequal to `Papoi`
  • #21 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.