NFJS Software Symposium Series 2015 - Jfokus Java Unit... · NFJS Software Symposium Series 2015...

47
NFJS Software Symposium Series 2015 Ken Sipe Advanced Java Unit Testing with Spock

Transcript of NFJS Software Symposium Series 2015 - Jfokus Java Unit... · NFJS Software Symposium Series 2015...

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