+ All Categories
Home > Documents > NFJS Software Symposium Series 2015 - Jfokus Java Unit... · NFJS Software Symposium Series 2015...

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

Date post: 13-May-2018
Category:
Upload: ngotu
View: 213 times
Download: 0 times
Share this document with a friend
47
NFJS Software Symposium Series 2015 Ken Sipe Advanced Java Unit Testing with Spock
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


Recommended