当我检查变量时,如何在Spock中使用IgnoreIf?

时间:2017-07-28 08:06:07

标签: groovy spock

我需要跳过程序中的一些函数,但它应该依赖于同一程序中定义的变量。我该怎么办?

def skip = true

@IgnoreIf({ skip })
def "some function" () {
..
}

3 个答案:

答案 0 :(得分:3)

另一种方法是使用的配置文件来包含/排除测试或基类。

首先,您可以创建自己的注释并放置在测试中 然后编写一个Spock配置文件 运行测试时,可以将spock.configuration属性设置为您选择的配置文件 这样,您可以包含/排除所需的测试和基类。

spock配置文件的示例:

runner {
    println "Run only tests"
    exclude envA
}

你的考试:

@envA
def "some function" () {
    ..
}

然后您可以运行:

./gradlew test -Pspock.configuration=mySpockConfig.groovy

这是github example

答案 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
    }
}