如何将纯Groovy脚本导入到没有类的Spock测试中

nkkqxpd9  于 2023-02-03  发布在  其他
关注(0)|答案(3)|浏览(154)

我有以下Groovy脚本:

剧本很棒

package groovy

def sayHi = "hi"

以及它的测试规范。**注:**这只是一个理论,不是我的一个严肃的方法。只是想告诉你我试图实现什么。

脚本规范

import spock.lang.Specification
import spock.lang.Unroll
import groovy.TheScript // what to do instead?

class TheScriptTest extends Specification {
    def "Test One"() {
        expect:
        sayHi() == "hi" // sayHi() does not exist - how to call the field?
    }
}

抛出的错误肯定地告诉我没有为**TheScriptTest.sayHi()**定义任何内容--这很好,我理解这个错误

3vpjnl9f

3vpjnl9f1#

看起来你的问题是你在脚本中定义了一个变量“def sayHi”,然后在测试中你把它当作一个方法来调用。

def sayHi(){ return "hi" }

注意:我认为在Groovy中“return”一词是不必要的。

eyh26e7m

eyh26e7m2#

您需要创建脚本sayHi.groovy

package groovy

//
def call() {
 return "hi"
}

在Groovy中,我们可以在脚本中添加一个名为call的方法,然后在不使用name call的情况下调用该方法,我们只需在对象示例上输入括号和可选参数,Groovy称之为call运算符:()

import spock.lang.Specification
import spock.lang.Unroll
import groovy.TheScript

class TheScriptTest extends Specification {
    def "Test One"() {
        expect:
        sayHi() == "hi"
    }
}
lawou6xi

lawou6xi3#

您可以使用new获得脚本TheScript.groovy的示例,然后调用它的run()方法。
您的测试应如下所示:

import spock.lang.Specification
import spock.lang.Unroll
import groovy.TheScript

class TheScriptTest extends Specification {
    def "Test One"() {
        expect:
        new TheScript().run() == "hi"
    }
}

相关问题