Spock Framework 101

What is Spock

- Testing framework for Groovy & Java

- Developed in Groovy, inspired by RSpec

- It's a DSL designed to write better tests

- Every test extends from Specification (tests are specs)

- Tags like "expect" separate different blocks of the test

- Asserts are implicit

- The name of the test suite ends with *Spec

- The name of each test case can be a string

Simple unit test

- Given / When / Then blocks (BDD style)

- Can be used to write Unit, Integration, Functional & E2E tests

- Groovy code (type inference)

E2E test

- Fixture methods

Fixture methods

- Data driven tests (one variable example)

- Groovy code (dynamic)

Data driven test |

- @Unroll annotation

- String interpolation in the name of the test

@Unroll

- Without @Unroll

- With @Unroll & string interpolation

- If any execution fails, the test fails as a whole

- If any execution fails, only that test case will fail

@Unroll

- Data driven blocks with multiple variables

- Works with multiple variables

- Helpful to triangulate test 

Data driven test ||

- Tells which test case fails

Data driven test ||

- Tells why it fails with a human readable error

Test output

- @Subject annotation

@Subject

- Mocking capabilities - Stub 

Stubs

- Mocking capabilities - Mock 

Mocks

- Mocking capabilities - WildChars

Mocking capabilities

Mocking capabilities

Mocking capabilities

Mocking capabilities

- Program the stub to return different values

Mocking capabilities

- Document test cases in a human readable way

Specifications as documentation

- The old method allows to work with the previous value

Old method

Testing exceptions

- Can assert that a specific type of exception is thrown

Testing exceptions

- Can make assertions on specific properties of the exception

@Stepwise

- Allows to write complex scenarios / user stories

@Ignore

- Excludes test from being executed

@IgnoreIf

- Excludes test executions based on specific conditions

- The opposite is @Requires

@IgnoreRest

- Excludes all tests not carrying this annotation

@Timeout

- Marks test as failed if it timeouts

@RestoreSystemProperties

- Restores system properties changed by the test automatically

Property testing (via Spock Genesis extension)

- Lazy data generators for property based testing 

- Useful when attempting to test for a wide range of inputs

Reports

Happy testing

Links

QA?

Spock

By David Molinero

Spock

  • 450