## Problem:

How to use **Spock**‘s **where block** to parametrize **given-when-then** tests?

## Solution:

**where block** is **Spock Framework**‘s power feature. It allows to test thoroughly in very easy way, using many different values.

One way to declare **where block** is to use very readable table syntax, like here:

def 'should sort list of numbers'() { given: def list = [a, b] when: def calculated = list.sort() then: calculated == expectedResult where: a | b | expectedResult 5 | 1 | [1, 5] 9 | 9 | [9, 9] }

The test could be shorter, but just to show that values from **where block** can be used around the test.

Another way to iterate over test data is to use **Groovy** “<<” operator that takes subsequent values from a collection. The following test initializes test values with subsequent elements from both lists at the same time:

def 'should compute the maximum of two numbers'() { expect: Math.max(a, b) == c where: a << [1, 4] b << [2, 3] c << [2, 4] }

In my experience the table form of expressing **where blocks** is often more readable.