Spock

Post on 20-Nov-2014

463 views 0 download

Tags:

description

JEConf 2014, Kiev

Transcript of Spock

SpockЕвгений Борисов

bsevgeny@gmail.com

Meta & IntroState Based TestingData Driven TestingInteraction Based TestingSpock ExtensionsMore Cool Stuff

What we’ll talk about

3

The creator of SpockGroovy & Gradle committerWorks for Gradleware@pniederw

Peter Niederwieser

A developer testing framework...for Groovy and Java applications...based on Groovy...fully compatible with JUnit...but going beyond!

Spock is...

Homepagehttp://spockframework.org

Source Codehttp://github.spockframework.org/spock

Documentationhttp://docs.spockframework.org/en/latest

Spock Web Consolehttp://webconsole.spockframework.org

Spock Example Projecthttp://github.spockframework.org/spock-example

Slides and Code for this Presentationhttp://github.spockframework.org/smarter-testing-with-spock

Getting Started

Who’s Using Spock?

Who’s Using Spock? (2)

Meta & IntroState Based TestingData Driven TestingInteraction Based TestingSpock ExtensionsMore Cool Stuff

What we’ll talk about

Classical Unit TestingArrangeActAssert

Given-When-Then

State Based Testing

Classical Unit TestingArrangeActAssert

Given-When-Then

State Based Testing

Show me th

e code!

• Blockssetup: cleanup: expect: given: when: then: where: and:• Fixture Methods

setup() cleanup() setupSpec() cleanupSpec()• Instance and @Shared fields• old() and thrown()

• Forces developers to think like users• Nice looking reports (that no one reads)

Recap: State Based Testing

Meta & IntroState Based TestingData Driven TestingInteraction Based TestingSpock ExtensionsMore Cool Stuff

What we’ll talk about

Test the same behavior......with varying data!

Data Driven Testing

Test the same behavior......with varying data!

Data Driven Testing

Show me the code!

where: blockData tablesExternal data sources@Unroll

Recap: Data Driven Testing

Meta & IntroState Based TestingData Driven TestingInteraction Based TestingSpock ExtensionsMore Cool Stuff

What we’ll talk about

How objects communicateMocking frameworks simplify the jobSpock has its own mocking framework

Interaction Based Testing

How objects communicateMocking frameworks simplify the jobSpock has its own mocking framework

Google it: “Mocks aren't Stubs”

Interaction Based Testing

How objects communicateMocking frameworks simplify the jobSpock has its own mocking framework

Interaction Based Testing

Show me the code!

Creating

Mocking

Recap: Interaction Based Testing

def sub = Mock(Subscriber)Subscriber sub = Mock()

1 * sub.receive("msg")(1..3) * sub.receive(_)(1.._) * sub.receive(_ as String)1 * sub.receive(!null)1 * sub.receive({it.contains("m")})1 * _./rec.*/("msg")

Stubbing

Mocking and Stubbing

Impressing your friends

Recap: Interaction Based Testing (2)

// now returns status codeString receive(String msg) { ... }  sub.receive(_) >> "ok"sub.receive(_) >>> ["ok", "ok", "fail"]sub.receive(_) >> { msg -> msg.size() > 3 ? "ok" : "fail" }

3 * sub.receive(_) >>> ["ok", "ok", "fail"]

(_.._) * _._(*_) >> _

NEW IN 0.7What’s new?

Group conditions/interactions w/ same target

Better mocking failure messages

New in 0.7 (1)

with(person) {     name == “Fred”   age == 30   sex == “male”} with(service) {   1 * start()   1 * stop()}

Stubs

Spies

Groovy mocks

Declare interactions upfront

More at:http://docs.spockframework.org/en/latest/new_and_noteworthy.html

New in 0.7 (2)

def person = Stub(Person)

def person = Spy(Person, constructorArgs: ["Fred", 30])

def person = GroovyMock(person) // GroovyStub, GroovySpy

def person = Mock(Person) {    1 * sleep()    sing() >> “tra-la-la”}

Meta & IntroState Based TestingData Driven TestingInteraction Based TestingSpock ExtensionsMore Cool Stuff

What we’ll talk about

ListenersInterceptorsAnnotation-driven extensionsGlobal extensions

Spock Extensions

Spring Extension

@ContextConfiguration(locations = ["my-app-context.xml"])class InjectionExamples extends Specification {         @Autowired    Service1 injectedByType      @Resource    Service1 injectedByName      @Autowired    ApplicationContext context}

Meta & IntroState Based TestingData Driven TestingInteraction Based TestingSpock ExtensionsMore Cool Stuff

What we’ll talk about

Homepagehttp://spockframework.orgSource Codehttp://github.spockframework.org/spockDocumentationhttp://docs.spockframework.org/en/latestSpock Web Consolehttp://webconsole.spockframework.orgSpock Example Projecthttp://github.spockframework.org/spock-exampleSlides and Code for this Presentationhttp://github.spockframework.org/smarter-testing-with-spockMocks Aren’t Stubshttp://martinfowler.com/articles/mocksArentStubs.html

Q&A