In a previous blog post we have seen the IgnoreIf
extension. There is also a counterpart: the Requires
extension. If we apply this extension to a feature method or specification class than the method or whole class is executed when the condition for the @Requires
annotation is true. If the condition is false the method or specification is not executed. As a value for the @Requires
annotation we must specify a closure. In the closure Spock adds some properties we can use for our conditions:
jvm
can be used to check a Java version or compatibility.sys
returns the Java system properties.env
used to access environment variables.os
can be used to check for operating system names.javaVersion
has the Java version asBigDecimal
, eg. 1.8.
In the following example we use the @Requires
annotation with different conditions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package com.mrhaki.spock import spock.lang.Requires import spock.lang.Specification class RequiresSampleSpec extends Specification { @Requires({ Boolean.valueOf(sys[ 'spock.longRunning' ]) }) def "run spec if Java system property 'spock.longRunning' is true" () { expect: true } @Requires({ Boolean.valueOf(env[ 'SPOCK_LONG_RUNNING' ]) }) def "run spec if environment variable 'SPOCK_LONG_RUNNING' is true" () { expect: true } @Requires({ javaVersion >= 1.7 }) def "run spec if run in Java 1.7 or higher" () { expect: true } @Requires({ jvm.isJava8() }) def "run spec if run in Java 1.8" () { expect: true } @Requires({ os.isWindows() }) def "run only if run on windows operating system" () { expect: true } } |
If we have the same condition to be applied for all feature methods in a specification we can use the @Requires
annotation at the class level:
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.mrhaki.spock import spock.lang.Requires import spock.lang.Specification @Requires({ jvm.isJava7Compatible() }) class RequiresSpec extends Specification { def "all feature methods run only if JVM is Java 7 compatible" () { expect: true } } |
Written with Spock 1.0-groovy-2.4.