Transcript
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


Top Related