• Save
Spock pres
Upcoming SlideShare
Loading in...5

Spock pres






Total Views
Views on SlideShare
Embed Views



2 Embeds 2

https://twitter.com 1
https://si0.twimg.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Spock pres Spock pres Presentation Transcript

    • Spock
    • About me● Software developer/architect at Michigan State University● Before that, 7 years in the insurance industry as a software developer.● Twitter: @elizhender
    • Executable specifications
    • ● Natural language● Programmer oriented
    • BDD
    • ● Extension of TDD (TDD done right!)● Organized into scenarios: given an initial context, when an event occurs, then ensure some outcome● Spock borrows from BDD extensively
    • ● Tools ● Cucumber ● EasyB ● JBehave
    • Spock
    • ● Spock is a BDD framework written in Groovy● Based on tools and languages like JUnit, jMock, Mockito, Groovy, Scala● Current version: 0.7 - Released in early October● Yes, it is named after the character on Star Trek!
    • ● Concise● Same tools● Natural language● Powerful
    • Getting ready
    • ● http://code.google. com/p/spock/wiki/GettingStarted● Instructions for Eclipse, IntelliJ, NetBeans
    • Spock Web Console
    • http://meetspock.appspot.com/
    • Spock and your IDE
    • ● For Eclipse: http://dist.springsource. org/release/GRECLIPSE/e4.2/
    • Spock Terminology Spock JUnitSpecification Test● JUnit classsetup() @Beforecleanup() @AftersetupSpec() @BeforeClasscleanupSpec() @AfterClassFeature TestParameterized feature TheoryCondition AssertionException condition @Test(expected=…)@FailsWith @Test(expected=…)Interaction Mock expectation (JMock, EasyMock, Mockito)
    • Anatomy of a SpockSpecification
    • Spock specifications extendspock.lang.Specification
    • ● Fields● Fixture methods● Feature methods● Helper methods
    • The basics
    • Spock uses the built in JUnitrunner in your IDE
    • Executable specifications – Now we’re talking!
    • What happens whena test fails?
    • How can we verify that anexception isn’t thrown?
    • Conditions
    • Types● Implicit ● Statements in then: and expect: blocks● Explicit ● Denoted by assert keyword elsewhere● Exception ● thrown ● notThrown
    • Feature Methods● When – Then● When – Then – Where● Given – When – Then● Expect● Expect – Where
    • Expect:
    • Stimulus and response are the same statement.
    • Data Driven Testing
    • If my test passes, that’s great!But what if it fails???
    • I can easily see which rowsin the table didn’t pass.
    • Another example
    • Column NameTable values
    • Now, I can compare each result with eachrow in the table in my test.
    • And I can see individual row results
    • Interactions (Mocking)
    • ● Spock has its own mocking framework built in● Can mock interfaces and classes● Cannot do partial mocks (as of right now)
    • Another example
    • Behavior for an invalid appointmentBehavior when the appointment is on a holiday
    • Database Interactions
    • ● Specifications that access a database can be mocked. ○ Can use in-memory databases like H2 or Derby● Use shared annotation for the field with the driver information.
    • Constraints on return values
    • subscriber.isAlive() >> true // single return value, repeated indefinitelysubscriber.isAlive() >>> [true, false, true] // multiple return values (anything that Groovy can iterate over), last one repeated indefinitelydef random = new Random()subscriber.isAlive() >> { random.nextBoolean() } // custom return valuesubscriber.isAlive() >> { throw new TimeoutException() } // custom action
    • Helper methods
    • Helper Method Requirements● Implicit conditions must be turned into explicit conditions (use assert keyword)● Must have void return type
    • Spock extensions
    • ● Interception-based● Built-in ● @Timeout ● @Ignore ● @IgnoreRest ● @FailsWith● Custom
    • Spock and Geb
    • Geb● Browser automation● Uses WebDriver(Selenium) and HtmlUnit● Built-in support for PageObject Pattern
    • What are page objects?Models of areas of your UI that your tests interact with.
    • For BDD testing youll need Geb, Geb for Spock, and Selenium.
    • Testing with Spock andFrameworks
    • ● Spring: http://code.google.com/p/spock/wiki/SpringExtension● Grails: http://grails.org/doc/2.0.0.RC1/guide/testing.html
    • Summary
    • ● Executable Specifications● BDD● Spock ○ Feature methods
    • ● Given-Stimulus-Response ○ When-Then ○ Given-When-Then ○ Expect-Where ○ etc.
    • ● Spock can integrate with a number of frameworks ○ Geb ○ Spring ○ Grails
    • Links● Spock Framework: http://code.google. com/p/spock/● Spock basics: http://code.google. com/p/spock/wiki/SpockBasics● Geb: http://www.gebish.org/ ○ Manual: http://www.gebish.org/manual/0.7.0/index. html● BDD: http://behaviour-driven.org/
    • Live long and happy testing!