Spock supports JUnit rules out of the box. We simply add a rule with the @Rule
annotation to our Spock specification and the rule can be used just like in a JUnit test. The Spring Boot project contains a JUnit rule OutputCapture
to capture the output of System.out
and System.err
.
In the following example specification we apply the OutputCapture
rule and use it in two feature methods:
Continue reading →
Spock's unroll feature is very powerful. The provider data variables can be used in the method description of our specification features with placeholders. For each iteration the placeholders are replaced with correct values. This way we get a nice output where we immediately can see the values that were used to run the code. Placeholders are denoted by a hash sign (#
) followed by the variable name. We can even invoke no-argument methods on the variable values or access properties. For example if we have a String value we could get the upper case value with #variableName.toUpperCase()
. If we want to use more complex expressions we must introduce a new data variable in the where
block. The value of the variable will be determined for each test invocation and we can use the result as a value in the method description.
package com.mrhaki.spock
import spock.lang.*
class SampleSpec extends Specification {
@Unroll
def "check if '#value' is lower case"() {
expect:
value.every { (it as char).isLowerCase() } == result
where:
value || result
'A' || false
'Ab' || false
'aB' || false
'a' || true
'ab' || true
}
}
Continue reading →