2017-01-20 2 views
1

У меня есть следующий Groovy скрипт:Как импортировать чистый Groovy скрипт на тест Спока без классов

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() - и это просто отлично. Я понимаю, что ошибка

+0

Используйте GroovyShell для анализа сценария, а затем используйте его в своем тесте. Не будет работать точно так, как вы показываете, но должно быть достаточно близко. – cjstehno

ответ

0

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

def sayHi(){ return "hi" } 

примечание: Я считаю, что слово «возвращение» не обязательно в groovy.

0

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

package groovy 

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

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

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? 
    } 
} 
Смежные вопросы