Java Testing With Spock - Ken Sipe (Trexin Consulting)

47
NFJS Software Symposium Series 2013 Ken Sipe Spock - The Logical Enterprise Testing Tool

description

The Spock unit testing framework is on the verge of a 1.0 release and has already proven itself to be the next generation thinking on how to test Java production code. One of the many ever present challenges to testing code is the ability to Mock classes which has simplified by Spock from a very early release. Recently added to Spock is the notion of Stubs and Spies. This sessions is designed to demonstrate proper unit testing technique showing off these new features along with a number of advanced Spock features.

Transcript of Java Testing With Spock - Ken Sipe (Trexin Consulting)

Page 1: Java Testing With Spock - Ken Sipe (Trexin Consulting)

NFJS Software Symposium Series 2013

Ken Sipe

Spock - The Logical Enterprise Testing Tool

Page 2: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingAbout Speaker

Developer: Embedded, C++, Java, Groovy, Grails, C#, Objective CSpeaker: JavaOne 2009 Rock Star, NFJS, JAXMicrosoft MCPSun Certified Java 2 ArchitectMaster of Scrums Agile CoachInstructor: VisiBroker CORBA

Rational Rose, OOAD

http://kensipe.blogspot.com/http://del.icio.us/kensipetwitter: @[email protected]

Page 3: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingAgenda

nTestingnIntroduction to SpocknMocking

Page 4: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

Spock Intro

4

Page 5: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

ntesting framework...

nbased on Groovy

nfully compatible with JUnit

nresult of learnings from¨RSpec, BDD, JUnit

5

Spock is...

Page 6: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingSpock Can...

nReduces lines of code

nMake tests more readable

nBe extended

6

Page 7: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

JUnit

7

Page 8: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingTaxonomy of JUnit

Page 9: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

9

JUnit Pain Points?

Page 10: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingUnit testing needs

nConcise, Clear and ReadablenPromote “user” thinking

¨context¨stimulus¨expectations

nProductivity

10

Page 11: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

Groovy

11

Page 12: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingTaxonomy of GroovyTestCase

Page 13: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingGroovy and Testing

Page 14: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingGroovy Power Assert

Condition not satisfied:

interest == calc.calculate(amt, year)| | | | | |

25.0 | | 20.0 100 4 | com.math.SimpleInterestCalculator@606e1dec

false

Page 15: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingGroovy Improvements

nConcise, Clear and ReadablenPromote “user” thinking

¨context¨stimulus¨expectations

nProductivity

15

Page 16: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

Spock

16

Page 17: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingSpock

nProgrammers Environment¨Groovy

nPromotes Clarity¨structural blocks¨removes noise

17

Page 18: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingWhy use Spock?

nExpressive testing languagenEasy to learnnUsable from unit to end-to-endnLeverages GroovynRuns with JUnit Runner

¨IDE¨CI

18

Page 19: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

Taxonomy of a Spec

19

Page 20: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingFirst Spec

Page 21: Java Testing With Spock - Ken Sipe (Trexin Consulting)

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

Page 22: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingMore Fields

nShared¨Setup once¨think setupSpec()

nstatics¨only use for constants

22

Page 23: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingFixture Methods

nbefore / after a featurenbefore / after a specnoptional

23

Page 24: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingFeature Methods

n“heart” of specnfour phases

¨setup the features fixture¨provide stimulus to system¨describes the response¨clean up

24

Page 25: Java Testing With Spock - Ken Sipe (Trexin Consulting)

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

Page 26: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingCommon Blocks

nWhen / Then / WherenGiven / When / Then

26

Page 27: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingBlocks

nsetup

¨must be first¨must be the only¨no special semantics¨label is optional¨label given: is an alias

27

Page 28: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingWhen / Then Blocks

n used together¨possible to have many per feature

n then restrictions¨conditions¨exception conditions¨automatic asserts¨interactions¨variable defs

28

Page 29: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingConditions

nchecking for exceptions

29

Page 30: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingThrowing an Exception NOT!

30

Page 31: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingMocks and Expectations

31

Page 32: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingCleanup on Feature X

ncleanup block¨only followed by a where block¨no repeats

32

Page 33: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingWhere Blocks

¨last in a method¨no repeats¨used for data-driven features

33

Page 34: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingHelper Methods

¨either return a booleannor

¨assert34

Page 35: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

Specification Functionsand Spock.lang.*

35

Page 36: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

nold()nthrown() / notThrownnwith {}

36

Page 37: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingSpock.lang.* Documentation

37

@Title@Narrative @Issue@See@Subject

Page 38: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingSpock.lang.* Ignoring Stuff

38

@Requires @IgnoreIf@Ignore@IgnoreRest

Page 39: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingReporting

39

@Unroll

Page 40: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingBuilt-in Extensions: AutoCleanup

40

@AutoCleanup@AutoCleanup(‘dispose’)@AutoCleanup(quite=true)

Page 41: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingBuilt-in Extensions: Timeout

41

@Timeout@Timeout(10)@Timeout(value=10, unit=TimeUnit.MILLISECONDS)

Page 42: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingBuilt-in Extensions: Stepwise

42

@Stepwise

Page 43: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

Hamcrest

43

Page 44: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

JUnit Rules

44

Page 45: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

SpockConfig

45

Page 46: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock TestingReferences

46

nGetting Spock¨http://code.google.com/p/spock/

nSource from Presentation¨https://github.com/kensipe/spock-demos-nfjs

Page 47: Java Testing With Spock - Ken Sipe (Trexin Consulting)

Spock Testing

n Closing and Q&A

¨Please fill out the session evaluation¨Ken Sipe

n [email protected] kensipe.blogspot.comn twitter: @kensipe

Summary