SlideShare a Scribd company logo
Grails Spock Testing
GRAILS SPOCK
TESTING
Agenda
1. Testingoverview
2. Understanding UnitTesting
3. Spock UnitTesting
4. Writing Unit test cases
5. Demo
6. Exercise
What do we test ?
What a program issupposed to do
==
What the program actuallydoes
Motivation
Peopleare not perfect
We make errorsin design and code
Testing is an Investment
Over the time the tests build, the
early investment in writingtest
cases pays dividends later as the
sizeof the application grows
A way Of Thinking
• Design and Coding are creative while Testing isDestructive
• Primarygoal isto break the software
• Very often the same person does coding and testing. He needs a
splitpersonality
• One needs to be paranoid and malicious
• Surprisinglyhard to do as people don't like finding themselves making
mistakes
MailService.groovy
• Testing isa process of executing software with the intention of finding
errors
• Good testing has high probability of finding yet undiscovered errors
• Successful testing discoverserrors
• Ifit did not, need to ask whether our testing approach isgood or not
Integral Part of Development
• Testingneedstobe integralpartateach levelof development
• Types:
• Unit testing (whitebox)
• Integration testing (whitebox)
• Functional testing (blackbox)
• Acceptance testing
Understanding Unit testing
• Individual units of source code are tested
• A unit isthe smallest testable part of the application
• Each test case isindependent of the others
• Substituteslike mock, stubs areused
• Testsindividual methods or blocks without considering the
surrounding infrastructure
• A unit test provides a strict contract that a piece of code MUSTsatisfy
Disadvantages of Unit testing
• Test cases ‐written to suit programmer’simplementation(not
necessarily specification)
• The actual database or external file isnever tested directly
• Highly reliant on Refactoring and Programming skils
Advantages of Unit testing
• Facilitates change
• Allows refactoring at a later date and makes sure the
module stil workscorrectly
• SimplifiesIntegration
• Byremoving uncertainty among units themselves
• Acts asDocumentation
• Acts as a living documentation of a system
Advantages of Unit testing
• Evolvesdesign
• In“Test Driven Approach”, the unit test may take the
place of formal design. Each unit test case acts as a
design element for classes, methods and behaviour
• Improves the Quality Of the Software
Spock
• A developer testing framework for Java and Groovy application
• Based onGroovy
• What makes it stand out from the crowd isitsbeautiful and highly
expressive specification language
Basics
Spockletsyouwritespecificationsthatdescribeexpected features
(properties,aspects)exhibitedby a systemof interest
import spock.lang.*
Package spock.lang contains themostimportanttypesfor writing
specifications
Specification
• A specification isrepresented as a Groovy class that extends from
spock.lang.Specification, e.g.,
• class MyFirstSpecification extends Specification{
• }
• Class names of Spock tests must end in either “Spec” or
“Specification”. Otherwise the Grails test runner won't find them.
… contd
• Specification contains a number of useful methods for writing
specifications
• Instructs JUnit to run specification withSputnik, Spock's JUnitrunner
Fields
• Declarations:
• def obj =newClass()
• @Shared res =new VeryExpensiveResource()
Fixture Methods
• Fixture methods are responsible for setting up and cleaning up the
environment in which feature methods are run.
• def setup(){}
• def cleanup(){}
• def setupSpec(){}
• def cleanupSpec() {}
Blocks
• A test case can have following blocks:
• setup
• when //forstimulus
• then //output comparison
• expect
• where
Example
Expect Block
• Itisuseful in situations where itis
more natural to describestimulus
and expected response in a
singleexpression
Where block
• Itisused to write data-driven featuremethods
Data Driven Testing
• Itisuseful to exercise the same test code multiple times, with varying
inputs and expected results.
• Itisa firstclass feature in Spock
Data Tables
• A convenient way to exercise a
feature method with a fixed set
of data
Data Pipes
• A data pipe, indicated by the
left-shift (<<)operator, connects a
data variable to a data provider.
@Unroll
• A method annotated with @Unrol will have itsiterations reported
independently
Exception Conditions
• They are used to describe that a when block should throw an
exception
Mocking
• Mock objects literally implement (or extend) the type they stand in
for
• Initiallymock objects have no behavior
• Calling methods on them is allowed but has no effect otherthan
returning the default value for the method’s return type, except for
equals and toString
• A mock object isonly equal to itself, has a unique hash code, and a
string representation that includes the name of the type it represents
..contd.
• Thisdefault behavior isoverrideable by stubbing the methods
• Mock objects are created with the MockingApi.Mock()
• def subscriber =Mock(Subscriber)
• Subscriber subsriber =Mock()
mockDomain()
• Takesa class and mock implementations of all the domain class
methods accessible onit
• mockDomain() provides a versionof domain classes in which the
database issimply listof domain instances in memory.
• mockDomain(Person, [persons])
• All mocked methods like save(),get() etc work against thislist.
mockForConstraintsTest()
• Highly specialized mocking for domain classes and command
objects that allows you to check whether the constraints are
behaving as expectedor not
• Itsimply adds a validate() method to a given domain class.
• mockForConstraintsTests(Person, [persons])
Test Mixins
• Since Grails 2.0,a collection of unit testing mixinsisprovided by Grails,
that enhances the behavior of a typical Junit or Spock test
• Common examplesare:
• @TestFor(BookController)
• @Mock([Book,Author])
TestFor Annotation
• The TestFor annotation defines a class under test and will
automatically create a field for the type of class under test
• For example, @TestFor(BookController) this will automaticallycreate
“controller” field
• IfTestForwas defined for a service then a “service” field would be
created
Mock Annotation
• The Mock annotation creates a mock version of any collaborators
• There isan in-memory implementation of GORM that will simulate
most interactions with GORM API
• For those interactions that are not automatically mocked, you need
to define mocksprogrammatically
Cardinality
• The cardinality of an interaction describes how often a method call is
expected. Itcan either be a fixed number or a range
• 1 *subscriber.receive(“hello”)
• 0..1)*subscriber.receive(“hello”)
• 0.._)*subscriber.receive(“hello”)
• 1 *subscriber._(“hello”)
Verification Of Interactions
Stubbing
• Stubbing isthe act of making collaborators respond to method calls
in acertain way
• Inother words stubbing isjustproviding dummy implementation of a
method
Stubbing Examples
• Returning FixedValues:
• subscriber.receive(_)>>”Ok”
• Toreturn different values on successive invocations, use the triple-
right-shift(>>>)operator
• subscriber.receive(_) >>>["ok","error","error", "ok"]
...contd.
• Accessing Method Arguments
• subscriber.receive(_) >>{String message ->message.size()
>3 ? "ok":"fail"}
• Throw anexception:
• subscriber.receive(_) >>{throw new InternalError("ouch")}
Test Code Coverage Plugin
• Creates test code coverage for your code
• Add dependency:
• test ":code-coverage:1.2.6"
• Torun:
• grails test-app -coverage
• The script will create HTLMreports and place them in the
tests/report/cobertura directory.
References
• https://code.google.com/p/spock/wiki/SpockBasics
• https://code.google.com/p/spock/wiki/GettingStarted
• http://docs.spockframework.org/en/latest/
• http://meetspock.appspot.com/
• http://naleid.com/blog/2012/05/01/upgrading-to-grails-2-unit-
testing/
Contact us
Our Office
Client
Location
Click Here To Know More!
Have more queries on Grails?
Talk to our GRAILS experts
Now!
Talk To Our Experts
Here's how the world's
biggest Grails team is
building enterprise
applications on Grails!

More Related Content

PDF
Unit test-using-spock in Grails
ODP
Grails unit testing
PDF
Writing good unit test
PPTX
PDF
Workshop unit test
PPSX
PPTX
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
PPTX
Best practices unit testing
Unit test-using-spock in Grails
Grails unit testing
Writing good unit test
Workshop unit test
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
Best practices unit testing

What's hot (20)

ODP
Embrace Unit Testing
PPT
Junit and testNG
PDF
How and what to unit test
PPTX
Tdd & unit test
PPT
Unit testing with java
PPTX
.Net Unit Testing with Visual Studio 2010
PDF
PPT
Automated Unit Testing
PPTX
Unit testing, UI testing and Test Driven Development in Visual Studio 2012
PPT
Simple Unit Testing With Netbeans 6.1
PDF
Test driven development - JUnit basics and best practices
PDF
All about unit testing using (power) mock
PDF
TestNG vs. JUnit4
PDF
Unit testing with JUnit
PDF
JUnit & Mockito, first steps
PPT
PPT
Testing and Mocking Object - The Art of Mocking.
ODP
Testing In Java
PDF
Java Testing With Spock - Ken Sipe (Trexin Consulting)
PPTX
Introduction to JUnit
Embrace Unit Testing
Junit and testNG
How and what to unit test
Tdd & unit test
Unit testing with java
.Net Unit Testing with Visual Studio 2010
Automated Unit Testing
Unit testing, UI testing and Test Driven Development in Visual Studio 2012
Simple Unit Testing With Netbeans 6.1
Test driven development - JUnit basics and best practices
All about unit testing using (power) mock
TestNG vs. JUnit4
Unit testing with JUnit
JUnit & Mockito, first steps
Testing and Mocking Object - The Art of Mocking.
Testing In Java
Java Testing With Spock - Ken Sipe (Trexin Consulting)
Introduction to JUnit
Ad

Viewers also liked (20)

DOC
Their most famous piece and why it was well know
PDF
FUKUYAMA BASE WORKSHOP Vol14 Theme
PPT
FUKUYAMA BASE WORKSHOP Vol17 Theme
PPTX
Advertisement/ PowerPoint
DOC
วัฏจักรของน้ำ
PPTX
Roles for my group
PPTX
Integrate technology by expanding your toolkit pp
PPTX
Stores around cannon building
PPT
Presentation of medivel
PPSX
Mn powerpoint
PPT
Medical terminology presentation 9
PPTX
The reproductive system presentation
PPTX
Sanat
PPTX
MongoDB (Advanced)
PPTX
The Router Explained Rroosend
PPT
4 planning section
PPTX
Grails and Ajax
PPT
Advert on social media
PPTX
Office 365 voor het onderwijs
KEY
American Revolutionary War Heroes
Their most famous piece and why it was well know
FUKUYAMA BASE WORKSHOP Vol14 Theme
FUKUYAMA BASE WORKSHOP Vol17 Theme
Advertisement/ PowerPoint
วัฏจักรของน้ำ
Roles for my group
Integrate technology by expanding your toolkit pp
Stores around cannon building
Presentation of medivel
Mn powerpoint
Medical terminology presentation 9
The reproductive system presentation
Sanat
MongoDB (Advanced)
The Router Explained Rroosend
4 planning section
Grails and Ajax
Advert on social media
Office 365 voor het onderwijs
American Revolutionary War Heroes
Ad

Similar to Grails Spock Testing (20)

PPTX
Unit/Integration Testing using Spock
PPT
Unit testing with Spock Framework
PDF
Spock pres
PPT
PDF
Spock: Test Well and Prosper
PPTX
PDF
Spocktacular Testing - Russel Winder
PDF
Spocktacular Testing
PDF
Spocktacular testing
PPT
PDF
Cool JVM Tools to Help You Test
PDF
Make Your Testing Groovy
PDF
Spock Testing Framework
PDF
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
PDF
Codemotion 2015 spock_workshop
PDF
PPTX
Whitebox testing of Spring Boot applications
PDF
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
PDF
Make Testing Groovy
PDF
Unit testing basic
Unit/Integration Testing using Spock
Unit testing with Spock Framework
Spock pres
Spock: Test Well and Prosper
Spocktacular Testing - Russel Winder
Spocktacular Testing
Spocktacular testing
Cool JVM Tools to Help You Test
Make Your Testing Groovy
Spock Testing Framework
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
Codemotion 2015 spock_workshop
Whitebox testing of Spring Boot applications
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Make Testing Groovy
Unit testing basic

More from TO THE NEW | Technology (20)

PDF
10 Best Node.js Practices you Need to Know!
PDF
10 Pragmatic UX techniques for building smarter products:
PDF
12 Key points which make Swift more effective than Objective C
PDF
Gulp - The Streaming Build System
PPTX
Grails Spring Boot
PPTX
AWS Elastic Beanstalk
PPT
Content migration to AEM
PPTX
AWS CodeDeploy
PPTX
Big Data Expertise
PPTX
An introduction to Object Oriented JavaScript
PPTX
Object Oriented JavaScript - II
PPTX
MongoDb and NoSQL
PPTX
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
PPTX
MongoDB using Grails plugin by puneet behl
PPTX
Cloud Formation
PPTX
BigData Search Simplified with ElasticSearch
DOCX
JULY IN GRAILS
PPTX
Getting groovier-with-vertx
PPTX
Introduction to Kanban
PPTX
Introduction to Heroku
10 Best Node.js Practices you Need to Know!
10 Pragmatic UX techniques for building smarter products:
12 Key points which make Swift more effective than Objective C
Gulp - The Streaming Build System
Grails Spring Boot
AWS Elastic Beanstalk
Content migration to AEM
AWS CodeDeploy
Big Data Expertise
An introduction to Object Oriented JavaScript
Object Oriented JavaScript - II
MongoDb and NoSQL
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
MongoDB using Grails plugin by puneet behl
Cloud Formation
BigData Search Simplified with ElasticSearch
JULY IN GRAILS
Getting groovier-with-vertx
Introduction to Kanban
Introduction to Heroku

Recently uploaded (20)

PPTX
UNIT III MENTAL HEALTH NURSING ASSESSMENT
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PDF
RTP_AR_KS1_Tutor's Guide_English [FOR REPRODUCTION].pdf
PDF
Complications of Minimal Access Surgery at WLH
PPTX
Orientation - ARALprogram of Deped to the Parents.pptx
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
Updated Idioms and Phrasal Verbs in English subject
PDF
What if we spent less time fighting change, and more time building what’s rig...
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
PDF
Yogi Goddess Pres Conference Studio Updates
PDF
Practical Manual AGRO-233 Principles and Practices of Natural Farming
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PPTX
Cell Types and Its function , kingdom of life
PDF
RMMM.pdf make it easy to upload and study
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
ChatGPT for Dummies - Pam Baker Ccesa007.pdf
PDF
Trump Administration's workforce development strategy
DOC
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
PPTX
master seminar digital applications in india
UNIT III MENTAL HEALTH NURSING ASSESSMENT
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
RTP_AR_KS1_Tutor's Guide_English [FOR REPRODUCTION].pdf
Complications of Minimal Access Surgery at WLH
Orientation - ARALprogram of Deped to the Parents.pptx
Final Presentation General Medicine 03-08-2024.pptx
Updated Idioms and Phrasal Verbs in English subject
What if we spent less time fighting change, and more time building what’s rig...
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
Yogi Goddess Pres Conference Studio Updates
Practical Manual AGRO-233 Principles and Practices of Natural Farming
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
Cell Types and Its function , kingdom of life
RMMM.pdf make it easy to upload and study
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
ChatGPT for Dummies - Pam Baker Ccesa007.pdf
Trump Administration's workforce development strategy
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
master seminar digital applications in india

Grails Spock Testing

  • 3. Agenda 1. Testingoverview 2. Understanding UnitTesting 3. Spock UnitTesting 4. Writing Unit test cases 5. Demo 6. Exercise
  • 4. What do we test ? What a program issupposed to do == What the program actuallydoes
  • 5. Motivation Peopleare not perfect We make errorsin design and code
  • 6. Testing is an Investment Over the time the tests build, the early investment in writingtest cases pays dividends later as the sizeof the application grows
  • 7. A way Of Thinking • Design and Coding are creative while Testing isDestructive • Primarygoal isto break the software • Very often the same person does coding and testing. He needs a splitpersonality • One needs to be paranoid and malicious • Surprisinglyhard to do as people don't like finding themselves making mistakes
  • 8. MailService.groovy • Testing isa process of executing software with the intention of finding errors • Good testing has high probability of finding yet undiscovered errors • Successful testing discoverserrors • Ifit did not, need to ask whether our testing approach isgood or not
  • 9. Integral Part of Development • Testingneedstobe integralpartateach levelof development • Types: • Unit testing (whitebox) • Integration testing (whitebox) • Functional testing (blackbox) • Acceptance testing
  • 10. Understanding Unit testing • Individual units of source code are tested • A unit isthe smallest testable part of the application • Each test case isindependent of the others • Substituteslike mock, stubs areused • Testsindividual methods or blocks without considering the surrounding infrastructure • A unit test provides a strict contract that a piece of code MUSTsatisfy
  • 11. Disadvantages of Unit testing • Test cases ‐written to suit programmer’simplementation(not necessarily specification) • The actual database or external file isnever tested directly • Highly reliant on Refactoring and Programming skils
  • 12. Advantages of Unit testing • Facilitates change • Allows refactoring at a later date and makes sure the module stil workscorrectly • SimplifiesIntegration • Byremoving uncertainty among units themselves • Acts asDocumentation • Acts as a living documentation of a system
  • 13. Advantages of Unit testing • Evolvesdesign • In“Test Driven Approach”, the unit test may take the place of formal design. Each unit test case acts as a design element for classes, methods and behaviour • Improves the Quality Of the Software
  • 14. Spock • A developer testing framework for Java and Groovy application • Based onGroovy • What makes it stand out from the crowd isitsbeautiful and highly expressive specification language
  • 16. import spock.lang.* Package spock.lang contains themostimportanttypesfor writing specifications
  • 17. Specification • A specification isrepresented as a Groovy class that extends from spock.lang.Specification, e.g., • class MyFirstSpecification extends Specification{ • } • Class names of Spock tests must end in either “Spec” or “Specification”. Otherwise the Grails test runner won't find them.
  • 18. … contd • Specification contains a number of useful methods for writing specifications • Instructs JUnit to run specification withSputnik, Spock's JUnitrunner
  • 19. Fields • Declarations: • def obj =newClass() • @Shared res =new VeryExpensiveResource()
  • 20. Fixture Methods • Fixture methods are responsible for setting up and cleaning up the environment in which feature methods are run. • def setup(){} • def cleanup(){} • def setupSpec(){} • def cleanupSpec() {}
  • 21. Blocks • A test case can have following blocks: • setup • when //forstimulus • then //output comparison • expect • where
  • 23. Expect Block • Itisuseful in situations where itis more natural to describestimulus and expected response in a singleexpression
  • 24. Where block • Itisused to write data-driven featuremethods
  • 25. Data Driven Testing • Itisuseful to exercise the same test code multiple times, with varying inputs and expected results. • Itisa firstclass feature in Spock
  • 26. Data Tables • A convenient way to exercise a feature method with a fixed set of data
  • 27. Data Pipes • A data pipe, indicated by the left-shift (<<)operator, connects a data variable to a data provider.
  • 28. @Unroll • A method annotated with @Unrol will have itsiterations reported independently
  • 29. Exception Conditions • They are used to describe that a when block should throw an exception
  • 30. Mocking • Mock objects literally implement (or extend) the type they stand in for • Initiallymock objects have no behavior • Calling methods on them is allowed but has no effect otherthan returning the default value for the method’s return type, except for equals and toString • A mock object isonly equal to itself, has a unique hash code, and a string representation that includes the name of the type it represents
  • 31. ..contd. • Thisdefault behavior isoverrideable by stubbing the methods • Mock objects are created with the MockingApi.Mock() • def subscriber =Mock(Subscriber) • Subscriber subsriber =Mock()
  • 32. mockDomain() • Takesa class and mock implementations of all the domain class methods accessible onit • mockDomain() provides a versionof domain classes in which the database issimply listof domain instances in memory. • mockDomain(Person, [persons]) • All mocked methods like save(),get() etc work against thislist.
  • 33. mockForConstraintsTest() • Highly specialized mocking for domain classes and command objects that allows you to check whether the constraints are behaving as expectedor not • Itsimply adds a validate() method to a given domain class. • mockForConstraintsTests(Person, [persons])
  • 34. Test Mixins • Since Grails 2.0,a collection of unit testing mixinsisprovided by Grails, that enhances the behavior of a typical Junit or Spock test • Common examplesare: • @TestFor(BookController) • @Mock([Book,Author])
  • 35. TestFor Annotation • The TestFor annotation defines a class under test and will automatically create a field for the type of class under test • For example, @TestFor(BookController) this will automaticallycreate “controller” field • IfTestForwas defined for a service then a “service” field would be created
  • 36. Mock Annotation • The Mock annotation creates a mock version of any collaborators • There isan in-memory implementation of GORM that will simulate most interactions with GORM API • For those interactions that are not automatically mocked, you need to define mocksprogrammatically
  • 37. Cardinality • The cardinality of an interaction describes how often a method call is expected. Itcan either be a fixed number or a range • 1 *subscriber.receive(“hello”) • 0..1)*subscriber.receive(“hello”) • 0.._)*subscriber.receive(“hello”) • 1 *subscriber._(“hello”)
  • 39. Stubbing • Stubbing isthe act of making collaborators respond to method calls in acertain way • Inother words stubbing isjustproviding dummy implementation of a method
  • 40. Stubbing Examples • Returning FixedValues: • subscriber.receive(_)>>”Ok” • Toreturn different values on successive invocations, use the triple- right-shift(>>>)operator • subscriber.receive(_) >>>["ok","error","error", "ok"]
  • 41. ...contd. • Accessing Method Arguments • subscriber.receive(_) >>{String message ->message.size() >3 ? "ok":"fail"} • Throw anexception: • subscriber.receive(_) >>{throw new InternalError("ouch")}
  • 42. Test Code Coverage Plugin • Creates test code coverage for your code • Add dependency: • test ":code-coverage:1.2.6" • Torun: • grails test-app -coverage • The script will create HTLMreports and place them in the tests/report/cobertura directory.
  • 43. References • https://code.google.com/p/spock/wiki/SpockBasics • https://code.google.com/p/spock/wiki/GettingStarted • http://docs.spockframework.org/en/latest/ • http://meetspock.appspot.com/ • http://naleid.com/blog/2012/05/01/upgrading-to-grails-2-unit- testing/
  • 44. Contact us Our Office Client Location Click Here To Know More! Have more queries on Grails? Talk to our GRAILS experts Now! Talk To Our Experts Here's how the world's biggest Grails team is building enterprise applications on Grails!