Sometimes we are working on a new feature in our code and we want to write a specification for it without yet really implementing the feature. To indicate we know the specification will fail while we are implementing the feature we can add the @PendingFeature
annotation to our specification method. With this annotation Spock will still execute the test, but will set the status to ignored if the test fails. But if the test passes the status is set to failed. So when we have finished the feature we need to remove the annotation and Spock will kindly remind us to do so this way.
In the following example specification we use the @PendingFeature
annotation:
package sample import spock.lang.Specification import spock.lang.PendingFeature import spock.lang.Subject class SampleSpec extends Specification { @Subject private final converter = new Converter() @PendingFeature void 'new feature to make String upper case'() { given: def value = 'Spock is awesome' expect: // This will fail as expected converter.upper(value) == 'SPOCK IS AWESOME' } } class Converter { String upper(String value) { value } }
When we run our test in for example Gradle we get the following result:
Now let's implement the upper
method:
package sample import spock.lang.Specification import spock.lang.PendingFeature import spock.lang.Subject class SampleSpec extends Specification { @Subject private final converter = new Converter() @PendingFeature void 'new feature to make String upper case'() { given: def value = 'Spock is awesome' expect: // This will fail no more converter.upper(value) == 'SPOCK IS AWESOME' } } class Converter { String upper(String value) { value.toUpperCase() } }
We run the test again and now we get a failing result although our implementation of the upper
method is correct:
So this tells us the @PendingFeature
is no longer needed. We can remove it and the specification will pass correctly.
Written with Spock 1.1.