我需要跳过程序中的一些函数,但它应该依赖于同一程序中定义的变量。我该怎么办?
def skip = true
@IgnoreIf({ skip })
def "some function" () {
..
}
答案 0 :(得分:3)
另一种方法是使用spock的配置文件来包含/排除测试或基类。
首先,您可以创建自己的注释并放置在测试中
然后编写一个Spock配置文件
运行测试时,可以将spock.configuration
属性设置为您选择的配置文件
这样,您可以包含/排除所需的测试和基类。
spock配置文件的示例:
runner {
println "Run only tests"
exclude envA
}
你的考试:
@envA
def "some function" () {
..
}
然后您可以运行:
./gradlew test -Pspock.configuration=mySpockConfig.groovy
答案 1 :(得分:2)
您可以通过访问静态上下文中的skip
字段来执行此操作:
import spock.lang.IgnoreIf
import spock.lang.Specification
class IgnoreIfSpec extends Specification {
static boolean skip = true
@IgnoreIf({ IgnoreIfSpec.skip })
def "should not execute this test if `IgnoreIfSepc.skip` is set to TRUE"() {
when:
def res = 1 + 1
then:
res == 2
}
def "should execute this test every time"() {
when:
def res = 1 + 1
then:
res == 2
}
}
否则传递给@IgnoreIf()
的闭包尝试在闭包内找到skip
字段并且失败。
答案 2 :(得分:0)
如果需要先计算变量,然后在计算的基础上做出忽略测试的决定,则可以使用静态块和静态变量
import spock.lang.IgnoreIf
import spock.lang.Specification
class IgnoreIfSpec extends Specification {
static final boolean skip
static {
//some code for computation
if("some condition")
skip = true
else
skip = false
}
@IgnoreIf({ IgnoreIfSpec.skip })
def "should not execute this test if `IgnoreIfSepc.skip` is set to TRUE"() {
when:
def res = 1 + 1
then:
res == 2
}
def "should execute this test every time"() {
when:
def res = 1 + 1
then:
res == 2
}
}