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

wnrlj8wa  于 2022-11-01  发布在  其他
关注(0)|答案(4)|浏览(182)

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

def skip = true

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

e5nszbig1#

另一种方法是使用spock的配置文件来包含/排除测试或基类。
首先,您创建自己的注解并将其放置在测试中。
然后编写Spock配置文件。
运行测试时,可以将spock.configuration属性设置为所选的配置文件。
这样,您就可以包含/排除所需的测试和基类。
spock配置文件示例:

runner {
    println "Run only tests"
    exclude envA
}

您的测试:

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

然后,您可以执行:

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

这是一个github example

hgc7kmma

hgc7kmma2#

您可以通过访问静态上下文中的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字段,但会失败。

6jjcrrmo

6jjcrrmo3#

如果需要先计算变量,然后根据计算结果决定是否忽略测试,则可以使用静态块和静态变量

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
    }
}
9avjhtql

9avjhtql4#

另一种说法是:

def skip = true

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

文件

示例

规范示例,如果需要示例字段、共享字段或示例方法。如果使用此属性,则在不执行fixture、数据提供程序等的情况下,无法预先跳过整个带注解的元素。相反,整个工作流将跟踪到功能方法调用,然后在此检查闭包,并决定是否中止特定迭代。
然后,您可以执行以下操作:

abstract class BaseTest extends Specification {
    boolean skip = false

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

子规格:
第一个
在本例中,skip是一个属性,但它也可以是一个方法。

相关问题