SlideShare a Scribd company logo
1 of 47
Download to read offline
Workshop
SPOCK: Testing (in the) Enterprise!
Fernando Redondo Ramírez
@pronoide_fer
Roadmap
Whoami
• Entrepreneur and Business Manager at
Pronoide since 2003
• Currently working for Hybris (SAP) as
technical trainer
• Java & Friends trainer for last ten years
• Doing things with Java from 1999 on
• Computer Engineer
• Happily married and proud father of two
children
• Not that Trekky yet (Sure!)
Brief introduction
- Groovy based testing and
specification framework
- Can test anything that runs
inside the JVM (even Java)
- Beautiful and highly expressive specification
language
- Compatible with most IDEs, build tools, and
continuous integration servers (JUnit runner)
Terminology and definitions
- Spock lets you write specifications that
describe expected features (properties,
aspects) exhibited by a system of interest.
- The system of interest could be anything between a
single class and a whole application, and is also called
system under specification (SUS).
- The description of a feature starts from a specific
snapshot of the SUS and its collaborators; this
snapshot is called the feature’s fixture.
Brief introduction
How do I start with Maven?
-
How do I start with Gradle?
Hands on!
Before start, you have to…
1. Start Groovy/Grails Tool Suite 3.6 (GGTS) and create a workspace (remember to
run it with a JDK and install the gradle extension for eclipse). Groovy 2.4 compiler
as well.
2. Download http://pronoide.com/downloads/springio-workshop-2015.zip
and unzip it into workspace folder. Or take it from
https://github.com/fredondo/springio2015-spock-workshop
3. Hold on! Please wait me right here…
Stage I: Import the workshop project
i. Import gradle Project (enterprise.mission)
Specifications
Test classes are known as Specifications
- All specifications (Specs) must extend
from spock.lang.Specification
- Each specification must have at least ONE test
method, all of these are called feature methods
- The most simple assert within a feature method is
the expect block, all its sentences must be evaluated
to true so that the feature will be OK
A very simple specification
Specifications
Stage II: Creating Specs
Complete the following specification and acomplish the challenges
(org.startrek.challenges.n01.RacesSpec)
Did you get it right? (org.startrek.solutions.n01.RacesSpec)
Stage II: Creating Specs
Stage II: Creating Specs
• Run the spec class as JUnit test
• Or execute the test gradle task (gradle quick task launcher)
Specfication methods
Within any specification we can found:
- Feature methods (or test methods) with
diferent blocks of code for stating the scenario
under spec
- Fixture methods that will be called automatically
before or after any single feature methods or before
and after the specification:
- setup, cleanup, setupSpec and cleanupSpeck
- Helper methods that can be called at any time from
other methods and can be convenient for code clarity
and code reuse
Stage III: Inside the Specs
Complete the following specification and acomplish the challenge
(org.startrek.challenges.n02.VoyageSpec)
Stage III: Inside the Specs
This is not rocket science (org.startrek.solutions.n02.VoyageSpec)
Feature method blocks
Inside any feature method we can come
across different kinds of phases or blocks:
- setup and/or cleanup, at most once per spec, to
inicialise and dispose stuff for that particular feature
(don’t mix up with fixtures). The setup block can be
omitted or aliased with given for readability
purpouses. We can create kind of different given
sections with and
- An expect block may only contain conditions and
variable definitions. It is useful in situations where it is
more natural to describe stimulus and expected
response in a single expression
Stage IV: Inside the feature
Complete the following feature methods and probe your courage
(org.startrek.challenges.n03.SpaceshipSpec)
Easy peasy!! (org.startrek.solutions.n03.SpaceshipSpec)
Stage IV: Inside the feature
Feature method blocks
These are the kinds of blocks within a
feature method (continuation):
- when and then blocks always occur
together. They describe a stimulus and
the expected response
owhen blocks can contain arbitrary code
othen blocks are restricted to conditions, exception
conditions, interactions, and variable definitions (which
mean more options available than for expect blocks)
oThere can be multiples pair ocurrencies within a feature
Stage IV: Inside the feature
Fill in the next feature method if you dare!
(org.startrek.challenges.n03.StarfleetSpec)
It was piece of cake!! (org.startrek.solutions.n03.SpaceshipSpec)
Stage IV: Inside the feature
Feature method blocks
These are the kinds of blocks (cont.):
- A where block always comes last in a feature
method, and cannot be repeated. It is used to write data-driven
feature methods. As a matter of convenience it can be written in
two different ways:
- A row per variable with the << symbol
- A column per variable with the | symbol
- A data-drive feature method can also be annotated with @unroll
- the method will be invoked multiple times with the provider data
variables
- these can be used in the method description with placeholders (#)
- For each iteration the placeholders are replaced with correct values
Stage IV: Inside the feature
Things get tougher! (org.startrek.challenges.n03.WeaponsDamageSpec)
As easy as pie!! (org.startrek.solutions.n03.WeaponsDamageSpec)
Stage IV: Inside the feature
Testing exceptions
In order to deal with specification that
throw or not exceptions, Spock provides
the following exception conditions
- thrown(ExceptionClass) and notThrow(ExceptionClass)
- It’s also possible to get the exception instance, to
access its attributes:
def ex=thrown()
Stage V: Exception Conditions
Complete these features (org.startrek.challenges.n04.DestructionSpec)
Keep it up! (org.startrek.solutions.n04.DestructionSpec)
Stage IV: Inside the feature
Interaction-based testing is a design and
testing technique that focusing more on the
behavior of objects rather than their state, it
explores how the object(s) under spec interact, by way of
method calls, with their collaborators
o We need to mock the collaborator implementations via
def colaborator=Mock(Class) Or Class colaborator=Mock()
o Mocks are usually created using Dynamic Proxies or CGLib
o we can track interactions with collaborators within then block:
when:
spock.teletransport()
then:
1 * transporter.use()
Interactions
Stage VI: Interactions
Write down this feature method
(org.startrek.challenges.n05.ShipManagementSpec)
It’s not that complicated, is it?
(org.startrek.solutions.n05. ShipManagementSpec)
Stage VI: Interactions
Useful stuff
In our daily life with Spock, we´ll usually
make use of:
- Share objects among feature via @Shared class
attributes, other way they won’t share them
– There are two kinds of conditions to validate a feature: Implicit
and Explicit. Implicit conditions appear in expect and then blocks.
To use conditions in other places, you can use assert keyword
– Sometimes feature methods are large or contain duplicated code.
It can make sense to introduce helper methods
– Specifications as Documentation, Spock provides a way to attach
textual descriptions to blocks
When: “everything start”
– You can leverage the use of Hamcrest
Stage VI: Other mechanisms
In the following spec identify with comment which mechanisms are
used (org.startrek.challenges.n06.MoviesSpec)
No brainer (org.startrek.solutions.n06. MoviesSpec)
Stage VI: Other mechanisms
Extensions
Spock offers lots of functionality for specs. But, there is
always a time when something else is needed. Spock
provides an interception-based extension mechanism.
Extensions are activated by annotations called directives. These are
some directives:
- @Timeout Sets a timeout for execution of a feature or fixture
- @Ignore Ignores a feature method
- @IgnoreRest Ignores all feature methods not carrying this annotation
- @IgnoreIf To ignore a feature method under certain conditions
- @FailsWith Expects a feature method to complete abruptly
- @Requires To execute a feature method under certain conditions
- @Stepwise executes features in the order that they are declared
- @Title and @Narrative To attach a natural-language name to a spec
- @Issue indicates that a feature/spec relates to one/more issues in an external
tracking system
- @Subject To indicate one or more subjects of a spec
- Many more and you can also create your own ones.
Extensions
The Spock Spring extension allows Spock to integrate
with Spring's TestContext framework
- the extension uses Spring API
- change add dependencies to our build.gradle:
spock-spring, spring-context and spring-test
Stage VI: Extensions
Let’s leave that for another time… ;)
Extra ball: Geb!
Geb is a framework for automatization of
functional web testing. It is based on the
following technologies:
o Groovy Language (and it’s incredible with Spock)
o Selenium WebDriver
o JQuery CSS Content Selector
o Page Object Model
• To leveage it, we have to
• change add dependencies to our build.gradle:
testCompile 'org.gebish:geb-spock:0.10.0'
testCompile "org.seleniumhq.selenium:selenium-chrome-driver:2.43.1”
• Download and configure our driver (automated browser) in
src/test/resources/GebConfig.groovy
Create a simple driver configuration & download the driver
(src/test/resources/GebConfig.groovy)
Extra ball: Geb!
Let’s perform a search for apock in memory-alpha.org
(org.startrek.challenges.n07.WebNavigationSpec.groovy)
Extra ball: Geb!
That was great! But, Can YOU do it in a better way?
Extra ball: Geb!
Let’s keep it simple an reusable! Functional Spec.
(org.startrek.solutions.n07.WebNavigationSpec2.groovy)
Extra ball: Geb!
Let’s keep it simple an reusable! Reusable Page Model.
(org.startrek.solutions.n07. MemoryAlphaPage.groovy and
org.startrek.solutions.n07. MemoryAlphaResultsPage.groovy )
Extra ball: Geb!
And that’s it. Thanks!
• @pronoide_fer
• https://github.com/fredondo/
• fredondo@pronoide.com
• http://pronoide.com
• http://blog.pronoide.es

More Related Content

What's hot

Mastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaMastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaDenilson Nastacio
 
Getting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and DataGetting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and DataCory Foy
 
Testing untestable code - STPCon11
Testing untestable code - STPCon11Testing untestable code - STPCon11
Testing untestable code - STPCon11Stephan Hochdörfer
 
Mockito vs JMockit, battle of the mocking frameworks
Mockito vs JMockit, battle of the mocking frameworksMockito vs JMockit, battle of the mocking frameworks
Mockito vs JMockit, battle of the mocking frameworksEndranNL
 
Java object oriented programming - OOPS
Java object oriented programming - OOPSJava object oriented programming - OOPS
Java object oriented programming - OOPSrithustutorials
 
Advanced java interview questions
Advanced java interview questionsAdvanced java interview questions
Advanced java interview questionsrithustutorials
 
Working with Legacy Code
Working with Legacy CodeWorking with Legacy Code
Working with Legacy CodeEyal Golan
 
Dev labs alliance top 20 basic java interview questions for sdet
Dev labs alliance top 20 basic java interview questions for sdetDev labs alliance top 20 basic java interview questions for sdet
Dev labs alliance top 20 basic java interview questions for sdetDevLabs Alliance
 
Top 20 Junit interview questions for sdet
Top 20 Junit interview questions for sdetTop 20 Junit interview questions for sdet
Top 20 Junit interview questions for sdetDevLabs Alliance
 
Top 20 cucumber interview questions for sdet
Top 20 cucumber interview questions for sdetTop 20 cucumber interview questions for sdet
Top 20 cucumber interview questions for sdetDevLabs Alliance
 
Unit testing (workshop)
Unit testing (workshop)Unit testing (workshop)
Unit testing (workshop)Foyzul Karim
 
DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...
DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...
DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...DevLabs Alliance
 
201 core java interview questions oo ps interview questions - javatpoint
201 core java interview questions   oo ps interview questions - javatpoint201 core java interview questions   oo ps interview questions - javatpoint
201 core java interview questions oo ps interview questions - javatpointravi tyagi
 
Working Effectively with Legacy Code: Lessons in Practice
Working Effectively with Legacy Code: Lessons in PracticeWorking Effectively with Legacy Code: Lessons in Practice
Working Effectively with Legacy Code: Lessons in PracticeAmar Shah
 

What's hot (20)

Unit Testing in Java
Unit Testing in JavaUnit Testing in Java
Unit Testing in Java
 
Mastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaMastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for Java
 
Testing In Java
Testing In JavaTesting In Java
Testing In Java
 
Getting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and DataGetting Unstuck: Working with Legacy Code and Data
Getting Unstuck: Working with Legacy Code and Data
 
Java quick reference
Java quick referenceJava quick reference
Java quick reference
 
JMockit
JMockitJMockit
JMockit
 
Testing untestable code - STPCon11
Testing untestable code - STPCon11Testing untestable code - STPCon11
Testing untestable code - STPCon11
 
Mockito vs JMockit, battle of the mocking frameworks
Mockito vs JMockit, battle of the mocking frameworksMockito vs JMockit, battle of the mocking frameworks
Mockito vs JMockit, battle of the mocking frameworks
 
Reflection in Java
Reflection in JavaReflection in Java
Reflection in Java
 
Java object oriented programming - OOPS
Java object oriented programming - OOPSJava object oriented programming - OOPS
Java object oriented programming - OOPS
 
Advanced java interview questions
Advanced java interview questionsAdvanced java interview questions
Advanced java interview questions
 
Working with Legacy Code
Working with Legacy CodeWorking with Legacy Code
Working with Legacy Code
 
Dev labs alliance top 20 basic java interview questions for sdet
Dev labs alliance top 20 basic java interview questions for sdetDev labs alliance top 20 basic java interview questions for sdet
Dev labs alliance top 20 basic java interview questions for sdet
 
Top 20 Junit interview questions for sdet
Top 20 Junit interview questions for sdetTop 20 Junit interview questions for sdet
Top 20 Junit interview questions for sdet
 
Top 20 cucumber interview questions for sdet
Top 20 cucumber interview questions for sdetTop 20 cucumber interview questions for sdet
Top 20 cucumber interview questions for sdet
 
Unit testing (workshop)
Unit testing (workshop)Unit testing (workshop)
Unit testing (workshop)
 
DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...
DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...
DevLabs Alliance Top 20 Software Testing Interview Questions for SDET - by De...
 
Unit Testing 101
Unit Testing 101Unit Testing 101
Unit Testing 101
 
201 core java interview questions oo ps interview questions - javatpoint
201 core java interview questions   oo ps interview questions - javatpoint201 core java interview questions   oo ps interview questions - javatpoint
201 core java interview questions oo ps interview questions - javatpoint
 
Working Effectively with Legacy Code: Lessons in Practice
Working Effectively with Legacy Code: Lessons in PracticeWorking Effectively with Legacy Code: Lessons in Practice
Working Effectively with Legacy Code: Lessons in Practice
 

Viewers also liked

Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics con Apache-Flume Elasticsearch HDFS KibanaFelix Rodriguez
 
Seguridad de las aplicaciones web con Spring Security 3.x
Seguridad de las aplicaciones web con Spring Security 3.xSeguridad de las aplicaciones web con Spring Security 3.x
Seguridad de las aplicaciones web con Spring Security 3.xFernando Redondo Ramírez
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementaciónDiego Krauthamer
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorAlberto Gimeno
 
Big Data en FaceBook
Big Data en FaceBookBig Data en FaceBook
Big Data en FaceBookJuan Frias
 
Postgres como base de datos NoSQL. Codemotion 2015
Postgres como base de datos NoSQL. Codemotion 2015Postgres como base de datos NoSQL. Codemotion 2015
Postgres como base de datos NoSQL. Codemotion 2015Ruben Gómez García
 
Conociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big dataConociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big dataSpanishPASSVC
 
CloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datosCloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datosJohn Bulla
 
Estudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y HiveEstudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y HiveWellness Telecom
 

Viewers also liked (15)

Javacro 2014 SemameStreet Grails 2 Speech
Javacro 2014  SemameStreet Grails 2 SpeechJavacro 2014  SemameStreet Grails 2 Speech
Javacro 2014 SemameStreet Grails 2 Speech
 
Greach 2014 Sesamestreet Grails2 Workshop
Greach 2014 Sesamestreet Grails2 Workshop Greach 2014 Sesamestreet Grails2 Workshop
Greach 2014 Sesamestreet Grails2 Workshop
 
Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 
Codemotion 2015 spock_workshop
Codemotion 2015 spock_workshopCodemotion 2015 spock_workshop
Codemotion 2015 spock_workshop
 
Seguridad de las aplicaciones web con Spring Security 3.x
Seguridad de las aplicaciones web con Spring Security 3.xSeguridad de las aplicaciones web con Spring Security 3.x
Seguridad de las aplicaciones web con Spring Security 3.x
 
Javacro 2014 Spring Security 3 Speech
Javacro 2014 Spring Security 3 SpeechJavacro 2014 Spring Security 3 Speech
Javacro 2014 Spring Security 3 Speech
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementación
 
Emr hive barcamp 2012
Emr hive   barcamp 2012Emr hive   barcamp 2012
Emr hive barcamp 2012
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
 
Big Data en FaceBook
Big Data en FaceBookBig Data en FaceBook
Big Data en FaceBook
 
Postgres como base de datos NoSQL. Codemotion 2015
Postgres como base de datos NoSQL. Codemotion 2015Postgres como base de datos NoSQL. Codemotion 2015
Postgres como base de datos NoSQL. Codemotion 2015
 
Conociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big dataConociendo los servicios adicionales en big data
Conociendo los servicios adicionales en big data
 
CloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datosCloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datos
 
Estudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y HiveEstudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y Hive
 
¿Cómo hacer los objetivos?
¿Cómo hacer los objetivos?¿Cómo hacer los objetivos?
¿Cómo hacer los objetivos?
 

Similar to Spring IO 2015 Spock Workshop

Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for seleniumapoorvams
 
Unit Testing Full@
Unit Testing Full@Unit Testing Full@
Unit Testing Full@Alex Borsuk
 
DevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroDevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroPaul Boos
 
JAVA VIVA QUESTIONS_CODERS LODGE.pdf
JAVA VIVA QUESTIONS_CODERS LODGE.pdfJAVA VIVA QUESTIONS_CODERS LODGE.pdf
JAVA VIVA QUESTIONS_CODERS LODGE.pdfnofakeNews
 
Nguyenvandungb seminar
Nguyenvandungb seminarNguyenvandungb seminar
Nguyenvandungb seminardunglinh111
 
Assessing Unit Test Quality
Assessing Unit Test QualityAssessing Unit Test Quality
Assessing Unit Test Qualityguest268ee8
 
Flex Mock Testing Frameworks: Comparative Analysis
Flex Mock Testing Frameworks: Comparative AnalysisFlex Mock Testing Frameworks: Comparative Analysis
Flex Mock Testing Frameworks: Comparative AnalysisNitin Khattar
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineJAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineAnup Singh
 
Dependency Injection in .NET applications
Dependency Injection in .NET applicationsDependency Injection in .NET applications
Dependency Injection in .NET applicationsBabak Naffas
 
Unit testing with Spock Framework
Unit testing with Spock FrameworkUnit testing with Spock Framework
Unit testing with Spock FrameworkEugene Dvorkin
 
Angular Intermediate
Angular IntermediateAngular Intermediate
Angular IntermediateLinkMe Srl
 
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...Andrzej Jóźwiak
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to useUma Ghotikar
 
Qtp interview questions
Qtp interview questionsQtp interview questions
Qtp interview questionsRamu Palanki
 
Qtp interview questions
Qtp interview questionsQtp interview questions
Qtp interview questionsRamu Palanki
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React AppAll Things Open
 
Automation testing real time interview question.pdf
Automation testing real time interview question.pdfAutomation testing real time interview question.pdf
Automation testing real time interview question.pdfEnjoyr
 

Similar to Spring IO 2015 Spock Workshop (20)

Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for selenium
 
Unit Testing Full@
Unit Testing Full@Unit Testing Full@
Unit Testing Full@
 
Spock pres
Spock presSpock pres
Spock pres
 
DevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroDevOps - Boldly Go for Distro
DevOps - Boldly Go for Distro
 
JAVA VIVA QUESTIONS_CODERS LODGE.pdf
JAVA VIVA QUESTIONS_CODERS LODGE.pdfJAVA VIVA QUESTIONS_CODERS LODGE.pdf
JAVA VIVA QUESTIONS_CODERS LODGE.pdf
 
java basic .pdf
java basic .pdfjava basic .pdf
java basic .pdf
 
Nguyenvandungb seminar
Nguyenvandungb seminarNguyenvandungb seminar
Nguyenvandungb seminar
 
Assessing Unit Test Quality
Assessing Unit Test QualityAssessing Unit Test Quality
Assessing Unit Test Quality
 
Flex Mock Testing Frameworks: Comparative Analysis
Flex Mock Testing Frameworks: Comparative AnalysisFlex Mock Testing Frameworks: Comparative Analysis
Flex Mock Testing Frameworks: Comparative Analysis
 
Gallio Crafting A Toolchain
Gallio Crafting A ToolchainGallio Crafting A Toolchain
Gallio Crafting A Toolchain
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & JasmineJAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & Jasmine
 
Dependency Injection in .NET applications
Dependency Injection in .NET applicationsDependency Injection in .NET applications
Dependency Injection in .NET applications
 
Unit testing with Spock Framework
Unit testing with Spock FrameworkUnit testing with Spock Framework
Unit testing with Spock Framework
 
Angular Intermediate
Angular IntermediateAngular Intermediate
Angular Intermediate
 
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
JUnit 4 Can it still teach us something? - Andrzej Jóźwiak - Kariera IT Łodź ...
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to use
 
Qtp interview questions
Qtp interview questionsQtp interview questions
Qtp interview questions
 
Qtp interview questions
Qtp interview questionsQtp interview questions
Qtp interview questions
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React App
 
Automation testing real time interview question.pdf
Automation testing real time interview question.pdfAutomation testing real time interview question.pdf
Automation testing real time interview question.pdf
 

Recently uploaded

Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 

Recently uploaded (20)

Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 

Spring IO 2015 Spock Workshop

  • 1. Workshop SPOCK: Testing (in the) Enterprise! Fernando Redondo Ramírez @pronoide_fer
  • 3. Whoami • Entrepreneur and Business Manager at Pronoide since 2003 • Currently working for Hybris (SAP) as technical trainer • Java & Friends trainer for last ten years • Doing things with Java from 1999 on • Computer Engineer • Happily married and proud father of two children • Not that Trekky yet (Sure!)
  • 4. Brief introduction - Groovy based testing and specification framework - Can test anything that runs inside the JVM (even Java) - Beautiful and highly expressive specification language - Compatible with most IDEs, build tools, and continuous integration servers (JUnit runner)
  • 5. Terminology and definitions - Spock lets you write specifications that describe expected features (properties, aspects) exhibited by a system of interest. - The system of interest could be anything between a single class and a whole application, and is also called system under specification (SUS). - The description of a feature starts from a specific snapshot of the SUS and its collaborators; this snapshot is called the feature’s fixture. Brief introduction
  • 6. How do I start with Maven? -
  • 7. How do I start with Gradle?
  • 8.
  • 9.
  • 10. Hands on! Before start, you have to… 1. Start Groovy/Grails Tool Suite 3.6 (GGTS) and create a workspace (remember to run it with a JDK and install the gradle extension for eclipse). Groovy 2.4 compiler as well. 2. Download http://pronoide.com/downloads/springio-workshop-2015.zip and unzip it into workspace folder. Or take it from https://github.com/fredondo/springio2015-spock-workshop 3. Hold on! Please wait me right here…
  • 11. Stage I: Import the workshop project i. Import gradle Project (enterprise.mission)
  • 12. Specifications Test classes are known as Specifications - All specifications (Specs) must extend from spock.lang.Specification - Each specification must have at least ONE test method, all of these are called feature methods - The most simple assert within a feature method is the expect block, all its sentences must be evaluated to true so that the feature will be OK
  • 13. A very simple specification Specifications
  • 14. Stage II: Creating Specs Complete the following specification and acomplish the challenges (org.startrek.challenges.n01.RacesSpec)
  • 15. Did you get it right? (org.startrek.solutions.n01.RacesSpec) Stage II: Creating Specs
  • 16. Stage II: Creating Specs • Run the spec class as JUnit test • Or execute the test gradle task (gradle quick task launcher)
  • 17. Specfication methods Within any specification we can found: - Feature methods (or test methods) with diferent blocks of code for stating the scenario under spec - Fixture methods that will be called automatically before or after any single feature methods or before and after the specification: - setup, cleanup, setupSpec and cleanupSpeck - Helper methods that can be called at any time from other methods and can be convenient for code clarity and code reuse
  • 18. Stage III: Inside the Specs Complete the following specification and acomplish the challenge (org.startrek.challenges.n02.VoyageSpec)
  • 19. Stage III: Inside the Specs This is not rocket science (org.startrek.solutions.n02.VoyageSpec)
  • 20. Feature method blocks Inside any feature method we can come across different kinds of phases or blocks: - setup and/or cleanup, at most once per spec, to inicialise and dispose stuff for that particular feature (don’t mix up with fixtures). The setup block can be omitted or aliased with given for readability purpouses. We can create kind of different given sections with and - An expect block may only contain conditions and variable definitions. It is useful in situations where it is more natural to describe stimulus and expected response in a single expression
  • 21. Stage IV: Inside the feature Complete the following feature methods and probe your courage (org.startrek.challenges.n03.SpaceshipSpec)
  • 23. Feature method blocks These are the kinds of blocks within a feature method (continuation): - when and then blocks always occur together. They describe a stimulus and the expected response owhen blocks can contain arbitrary code othen blocks are restricted to conditions, exception conditions, interactions, and variable definitions (which mean more options available than for expect blocks) oThere can be multiples pair ocurrencies within a feature
  • 24. Stage IV: Inside the feature Fill in the next feature method if you dare! (org.startrek.challenges.n03.StarfleetSpec)
  • 25. It was piece of cake!! (org.startrek.solutions.n03.SpaceshipSpec) Stage IV: Inside the feature
  • 26. Feature method blocks These are the kinds of blocks (cont.): - A where block always comes last in a feature method, and cannot be repeated. It is used to write data-driven feature methods. As a matter of convenience it can be written in two different ways: - A row per variable with the << symbol - A column per variable with the | symbol - A data-drive feature method can also be annotated with @unroll - the method will be invoked multiple times with the provider data variables - these can be used in the method description with placeholders (#) - For each iteration the placeholders are replaced with correct values
  • 27. Stage IV: Inside the feature Things get tougher! (org.startrek.challenges.n03.WeaponsDamageSpec)
  • 28. As easy as pie!! (org.startrek.solutions.n03.WeaponsDamageSpec) Stage IV: Inside the feature
  • 29. Testing exceptions In order to deal with specification that throw or not exceptions, Spock provides the following exception conditions - thrown(ExceptionClass) and notThrow(ExceptionClass) - It’s also possible to get the exception instance, to access its attributes: def ex=thrown()
  • 30. Stage V: Exception Conditions Complete these features (org.startrek.challenges.n04.DestructionSpec)
  • 31. Keep it up! (org.startrek.solutions.n04.DestructionSpec) Stage IV: Inside the feature
  • 32. Interaction-based testing is a design and testing technique that focusing more on the behavior of objects rather than their state, it explores how the object(s) under spec interact, by way of method calls, with their collaborators o We need to mock the collaborator implementations via def colaborator=Mock(Class) Or Class colaborator=Mock() o Mocks are usually created using Dynamic Proxies or CGLib o we can track interactions with collaborators within then block: when: spock.teletransport() then: 1 * transporter.use() Interactions
  • 33. Stage VI: Interactions Write down this feature method (org.startrek.challenges.n05.ShipManagementSpec)
  • 34. It’s not that complicated, is it? (org.startrek.solutions.n05. ShipManagementSpec) Stage VI: Interactions
  • 35. Useful stuff In our daily life with Spock, we´ll usually make use of: - Share objects among feature via @Shared class attributes, other way they won’t share them – There are two kinds of conditions to validate a feature: Implicit and Explicit. Implicit conditions appear in expect and then blocks. To use conditions in other places, you can use assert keyword – Sometimes feature methods are large or contain duplicated code. It can make sense to introduce helper methods – Specifications as Documentation, Spock provides a way to attach textual descriptions to blocks When: “everything start” – You can leverage the use of Hamcrest
  • 36. Stage VI: Other mechanisms In the following spec identify with comment which mechanisms are used (org.startrek.challenges.n06.MoviesSpec)
  • 37. No brainer (org.startrek.solutions.n06. MoviesSpec) Stage VI: Other mechanisms
  • 38. Extensions Spock offers lots of functionality for specs. But, there is always a time when something else is needed. Spock provides an interception-based extension mechanism. Extensions are activated by annotations called directives. These are some directives: - @Timeout Sets a timeout for execution of a feature or fixture - @Ignore Ignores a feature method - @IgnoreRest Ignores all feature methods not carrying this annotation - @IgnoreIf To ignore a feature method under certain conditions - @FailsWith Expects a feature method to complete abruptly - @Requires To execute a feature method under certain conditions - @Stepwise executes features in the order that they are declared - @Title and @Narrative To attach a natural-language name to a spec - @Issue indicates that a feature/spec relates to one/more issues in an external tracking system - @Subject To indicate one or more subjects of a spec - Many more and you can also create your own ones.
  • 39. Extensions The Spock Spring extension allows Spock to integrate with Spring's TestContext framework - the extension uses Spring API - change add dependencies to our build.gradle: spock-spring, spring-context and spring-test
  • 40. Stage VI: Extensions Let’s leave that for another time… ;)
  • 41. Extra ball: Geb! Geb is a framework for automatization of functional web testing. It is based on the following technologies: o Groovy Language (and it’s incredible with Spock) o Selenium WebDriver o JQuery CSS Content Selector o Page Object Model • To leveage it, we have to • change add dependencies to our build.gradle: testCompile 'org.gebish:geb-spock:0.10.0' testCompile "org.seleniumhq.selenium:selenium-chrome-driver:2.43.1” • Download and configure our driver (automated browser) in src/test/resources/GebConfig.groovy
  • 42. Create a simple driver configuration & download the driver (src/test/resources/GebConfig.groovy) Extra ball: Geb!
  • 43. Let’s perform a search for apock in memory-alpha.org (org.startrek.challenges.n07.WebNavigationSpec.groovy) Extra ball: Geb!
  • 44. That was great! But, Can YOU do it in a better way? Extra ball: Geb!
  • 45. Let’s keep it simple an reusable! Functional Spec. (org.startrek.solutions.n07.WebNavigationSpec2.groovy) Extra ball: Geb!
  • 46. Let’s keep it simple an reusable! Reusable Page Model. (org.startrek.solutions.n07. MemoryAlphaPage.groovy and org.startrek.solutions.n07. MemoryAlphaResultsPage.groovy ) Extra ball: Geb!
  • 47. And that’s it. Thanks! • @pronoide_fer • https://github.com/fredondo/ • fredondo@pronoide.com • http://pronoide.com • http://blog.pronoide.es