spock extensions anatomy

40
1

Upload: goldin-evgeny

Post on 22-Apr-2015

2.689 views

Category:

Technology


4 download

DESCRIPTION

Spock Extensions allow to integrate Spock Specifications with other thid-party libraries, like Spring, Guice, Grails or Tapestry. They allow to control tests execution, their order and modify test results according to your custom criteria.This presentation provides all the details required for implementing your very own Spock extensions. Global extensions, annotation-driven extensions, Spock interceptors and listeners are covered.

TRANSCRIPT

Page 1: Spock Extensions Anatomy

1

Page 2: Spock Extensions Anatomy

Goldin  Evgeny

TeamCity  and  YouTrack  Evangelist

Groovy  practitioner

GroovyMag  writer

Blogger

Open-­‐Source  developer

@evgeny_goldin2

Page 3: Spock Extensions Anatomy

3

Agenda

Page 4: Spock Extensions Anatomy

Agenda

Why  extending  Spock?

Global  and  annotation-­‐driven  extensions

Interceptors  and  Listeners

Demos  and  examples

Cookbook  and  gotchas

4

Page 5: Spock Extensions Anatomy

5

Why?

Page 6: Spock Extensions Anatomy

Why  Extending  Spock?

6

Integrate - @Rule, @Autowired

Page 7: Spock Extensions Anatomy

Why  Extending  Spock?

7

Integrate - @Rule, @Autowired

Helper fields - @TestDir, @TempDir

Page 8: Spock Extensions Anatomy

Why  Extending  Spock?

8

Integrate - @Rule, @Autowired

Helper fields - @TestDir, @TempDir

Control - @Ignore, @FailsWith

Page 9: Spock Extensions Anatomy

Why  Extending  Spock?

9

Integrate - @Rule, @Autowired

Helper fields - @TestDir, @TempDir

Control - @Ignore, @FailsWith

Report - @Unroll, ProfilerExtension

Page 10: Spock Extensions Anatomy

Spock  Dictionary

10

Page 11: Spock Extensions Anatomy

Spock  Dictionary

11

specification

Page 12: Spock Extensions Anatomy

Spock  Dictionary

12

fixture methods

Page 13: Spock Extensions Anatomy

Spock  Dictionary

13

fields

Page 14: Spock Extensions Anatomy

Spock  Dictionary

14

feature methods

Page 15: Spock Extensions Anatomy

Spock  Dictionary

15

iterations

Page 16: Spock Extensions Anatomy

Extensions  Dictionary

Global  extensions

Annotation-­‐driven  extensions

Interceptors

Listeners

16

Page 17: Spock Extensions Anatomy

Extensions  Dictionary

17

Global Annotation-­‐DrivenIntercep

tors

Listen

ers

RuleExtension

OptimizeRunOrderExtension

@Timeout

@Stepwise

Page 18: Spock Extensions Anatomy

Extensions  Dictionary

18

Global Annotation-­‐DrivenIntercep

tors

Listen

ers

RuleExtension

OptimizeRunOrderExtension

@Timeout

@Stepwise

Page 19: Spock Extensions Anatomy

Global  Extensions

19

src/main/resources

src/test/resources

META-INF/services/org.spockframework.runtime.extension.IGlobalExtension

Page 20: Spock Extensions Anatomy

Global  Extensions

20

dependencies { ... testCompile 'com.github.goldin:spock-extensions:0.1.4'}

Or

dependencies { ... testRuntime 'com.github.goldin:spock-extensions:0.1.4'}

Page 22: Spock Extensions Anatomy

SpecInfo

22

Read  fields,  feature  and  fixture  methods

Add  interceptors

Add  listeners

Re-­‐order,  filter,  sort,  skip,  exclude  features

Page 27: Spock Extensions Anatomy

Annotation  Driven  Extension

27

Statele

ss

vs.

Statef

ul

Page 28: Spock Extensions Anatomy

Annotation  Driven  Extension

28

@Ignor

e

@With

Page 29: Spock Extensions Anatomy

Listeners

29

Added  to  spec

Before  and  after  spec,  feature,  iteration

On  error

Skipped  spec  or  feature

Listen  passively,  do  not  throw  exceptions

Get  passed  official  test  results

Page 30: Spock Extensions Anatomy

Interceptors

30

Added  to  spec,  feature  or  fixture  methods

Intercept  method  invocation

invocation.proceed()

Can  change  test  outcome  and  behavior

Can  throw  exceptions

But  ..  following  interceptors  can  do  the  same

Page 32: Spock Extensions Anatomy

Gotchas

Use  the  right  tool  for  the  job

Attach  interceptors  only  where  they  belong

Do  not  throw  exceptions  from  listeners

Reuse  listeners  or  interceptors  with  caution

Mark  feature  methods  as  skipped  if  needed

Skipped  (skip  a  few)  vs.  excluded  (run  a  few)32

Page 34: Spock Extensions Anatomy

34

To Summarize ...

Page 35: Spock Extensions Anatomy

Why  Extending  Spock?

35

Integrate - @Rule, @Autowired

Helper fields - @TestDir, @TempDir

Control - @Ignore, @FailsWith

Report - @Unroll, ProfilerExtension

Page 36: Spock Extensions Anatomy

Extensions  Dictionary

Global  extensions

Annotation-­‐driven  extensions

Interceptors

Listeners

36

Page 37: Spock Extensions Anatomy

Extensions  Project

github.com/evgeny-­‐goldin/spock-­‐extensions

@TestDir

@TempDir

@Time

@With

ProfilerExtension

37

Page 39: Spock Extensions Anatomy

39

Q & A

Page 40: Spock Extensions Anatomy

40

See you at Gr8Conf 2013!