Spock
-
Upload
evgeny-borisov -
Category
Software
-
view
463 -
download
0
description
Transcript of Spock
SpockЕвгений Борисов
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