Spock aims to be a more powerful alternative to the traditional JUnit stack, by leveraging Groovy features which seamlessly integrate with Java
Spock Features Highlights
- Highly Expressive
- Spock enforces a clear test structure
- BDD style test can be expressive through the “given, when and then” blocks
- Compatible with all major build tools and continuous integration providers
- Inbuilt Mocking and Stubbing
- Parameterized test and Data-driven test ( Data table-based and SQL table-based)
JUNIT -> SPOCK -> CUCUMBER
Spock lies between junit and cucumber
At a glance, the Spock framework is,
- BDD style testing and specification framework
- Which runs Junit under the hood
- For Java and Groovy applications
- Test case writing in Groovy
- All three components combine with a single library
- Unit testing
- Mocking
- BDD
![](https://tharinda.wiki/wp-content/uploads/2023/03/image.png)
given, when, then, expect, cleanup, and where
![](https://tharinda.wiki/wp-content/uploads/2023/03/image-1.png)
- Given – any setup needed before a test is run.
- When – This is where we provide a stimulus to what is under test. In other words, where we invoke our method under test
- Then – This is where the assertions belong. In Spock, these are evaluated as plain Boolean assertions
- Expect – This is a way of performing our stimulus and assertion within the same block.
- Cleanup – Here we tear down any test dependency resources that would otherwise be left behind.
Some highlights
- A Specification,
- is represented as a Groovy class that extends from “
spock.lang.Specification
”. - The name of a specification usually relates to the system or system operation described by the specification.
- is represented as a Groovy class that extends from “
- Fixture Methods
- def setupSpec() {} // runs once – before the first feature method
- def setup() {} // runs before every feature method
- def cleanup() {} // runs after every feature method
- def cleanupSpec() {} // runs once – after the last feature method
Original documentation provides more details with all kinds of examples, Some highlights are shown below,
![](https://tharinda.wiki/wp-content/uploads/2024/06/Spock-features.png)
Let’s try more specific example with compared to other test frameworks
JUNIT -> SPOCK -> CUCUMBER
Let’s try a real-world scenario with all three formats of testing.
Use case: Event Routing
X application consumes messages from many systems and based on the Message content, it will be routed to the target systems
- Messages are consumed from
- RIC, RT, RL
- Routed to multiple Targets
- EUCLID, XGIX, RL, KIWI, RIC
/TODO add coding examples
Spock With Spring Framework
- Similar to Junit spring testing
- The framework supports all types of spring test annotations
- @Autowired
- @ContextConfiguration
- @SpringBootTest
- @SpringMVCTest
- Mocks
- DetachedMockFactory – allows the creation of Spock mocks outside of a specification
- @SpringBean – Similar to spring @MockBean
- @SpringSpy – If you want to spy on an existing bean
More details are available here
![](https://tharinda.wiki/wp-content/uploads/2024/06/giphy.gif)