Как импортировать чистый Groovy-скрипт в тест на спок без классов

У меня есть следующий Groovy Script:

TheScript.groovy

package groovy

def sayHi = "hi"

И тест спецификации для этого. Примечание: это просто теория, а не серьезный подход с моей стороны. Просто хочу показать вам, чего я пытался достичь.

TheScriptSpec

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() ничего не определено - и это нормально. Я понимаю эту ошибку

3 ответа

Вы можете получить экземпляр вашего скриптаTheScript.groovyиспользуя new, а затем вызовите егоrun()метод.

Ваш тест должен выглядеть так:

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

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

Вам нужно создать скрипт sayHi.groovy

package groovy

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

В Groovy мы можем добавить метод с именем call в скрипт, а затем вызвать метод без использования имени name. Мы просто напечатали бы круглые скобки и необязательные аргументы в экземпляре объекта. Groovy называет это оператором вызова: ()

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

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

Похоже, ваша проблема в том, что вы определяете переменную в своем скрипте "def sayHi", а затем в своем тесте вы вызываете ее, как если бы это был метод.

def sayHi(){ return "hi" }

примечание: я считаю, что слово "возврат" не обязательно в Groovy.

Другие вопросы по тегам