Как импортировать чистый 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.