nfjs software symposium series 2015 - jfokus java... · nfjs software symposium series 2015 ken...
TRANSCRIPT
NFJS Software Symposium Series 2015
Ken Sipe
Advanced Java Unit Testing with Spock
Spock TestingAbout Speaker
Developer: Embedded, C++, Java, Groovy, Grails, C#, Objective C Speaker: JavaOne 2009 Rock Star, NFJS, JAX Microsoft MCP Sun Certified Java 2 Architect Master of Scrums Agile Coach Instructor: VisiBroker CORBA
Rational Rose, OOAD
http://kensipe.blogspot.com/ http://del.icio.us/kensipe twitter: @kensipe [email protected]
Spock TestingAgenda
nTesting nIntroduction to Spock nMocking
Spock Testing
Spock Intro
4
Spock Testing
ntesting framework...
nbased on Groovy
nfully compatible with JUnit
nresult of learnings from ¨RSpec, BDD, JUnit
5
Spock is...
Spock TestingSpock Can...
nReduces lines of code
nMake tests more readable
nBe extended
6
Spock Testing
JUnit
7
Spock TestingTaxonomy of JUnit
Spock Testing
9
JUnit Pain Points?
Spock TestingUnit testing needs
nConcise, Clear and Readable nPromote “user” thinking
¨context ¨stimulus ¨expectations
nProductivity
10
Spock Testing
Groovy
11
Spock TestingTaxonomy of GroovyTestCase
Spock TestingGroovy and Testing
Spock TestingGroovy Power Assert
Condition not satisfied:
interest == calc.calculate(amt, year) | | | | | |
25.0 | | 20.0 100 4 | com.math.SimpleInterestCalculator@606e1dec
false
Spock TestingGroovy Improvements
nConcise, Clear and Readable nPromote “user” thinking
¨context ¨stimulus ¨expectations
nProductivity
15
Spock Testing
Spock
16
Spock TestingSpock
nProgrammers Environment ¨Groovy
nPromotes Clarity ¨structural blocks ¨removes noise
17
Spock TestingWhy use Spock?
nExpressive testing language nEasy to learn nUsable from unit to end-to-end nLeverages Groovy nRuns with JUnit Runner
¨IDE ¨CI
18
Spock Testing
Taxonomy of a Spec
19
Spock TestingFirst Spec
Spock TestingTerms
nSpecification ¨compare to TestCase or GroovyTestCase ¨Instructs JUnit to run with Sputnik (JUnit runner)
nFields ¨initialized for each “test” ¨think “setup” ¨not shared between feature methods
21
Spock TestingMore Fields
nShared ¨Setup once ¨think setupSpec()
nstatics ¨only use for constants
22
Spock TestingFixture Methods
nbefore / after a feature nbefore / after a spec noptional
23
Spock TestingFeature Methods
n“heart” of spec nfour phases
¨setup the features fixture ¨provide stimulus to system ¨describes the response ¨clean up
24
Spock TestingBlocks
25
given: preconditions, data fixtures
when: actions that trigger some outcomethen: makes assertions about outcome
expect: short alt to when & then
where: applies varied inputs
and: sub-divides other blocks
setup: alias for given
cleanup: post-conditions, housekeeping
Spock TestingCommon Blocks
nWhen / Then / Where nGiven / When / Then
26
Spock TestingBlocks
nsetup
¨must be first ¨must be the only ¨no special semantics ¨label is optional ¨label given: is an alias
27
Spock TestingWhen / Then Blocks
nused together ¨possible to have many per feature
nthen restrictions ¨conditions ¨exception conditions ¨automatic asserts ¨interactions ¨variable defs
28
Spock TestingConditions
nchecking for exceptions
29
Spock TestingThrowing an Exception NOT!
30
Spock TestingMocks and Expectations
31
Spock TestingCleanup on Feature X
ncleanup block ¨only followed by a where block ¨no repeats
32
Spock TestingWhere Blocks
¨last in a method ¨no repeats ¨used for data-driven features
33
Spock TestingHelper Methods
¨either return a boolean nor
¨assert34
Spock Testing
Specification Functionsand Spock.lang.*
35
Spock Testing
nold() nthrown() / notThrown nwith {}
36
Spock TestingSpock.lang.* Documentation
37
@Title @Narrative @Issue @See @Subject
Spock TestingSpock.lang.* Ignoring Stuff
38
@Requires @IgnoreIf @Ignore @IgnoreRest
Spock TestingReporting
39
@Unroll
Spock TestingBuilt-in Extensions: AutoCleanup
40
@AutoCleanup @AutoCleanup(‘dispose’) @AutoCleanup(quite=true)
Spock TestingBuilt-in Extensions: Timeout
41
@Timeout @Timeout(10) @Timeout(value=10, unit=TimeUnit.MILLISECONDS)
Spock TestingBuilt-in Extensions: Stepwise
42
@Stepwise
Spock Testing
Hamcrest
43
Spock Testing
JUnit Rules
44
Spock Testing
SpockConfig
45
Spock TestingReferences
46
nGetting Spock ¨http://code.google.com/p/spock/
nSource from Presentation ¨https://github.com/kensipe/spock-demos-nfjs
Spock Testing
n Closing and Q&A
¨Please fill out the session evaluation ¨Ken Sipe
n [email protected] n kensipe.blogspot.com n twitter: @kensipe
Summary