在eval()中传递两个对象 - Groovy(使用变量的soapUI断言)

时间:2014-10-15 16:41:59

标签: groovy eval

我有这样的声明

eval.me ('a' , a , "assert something == something: log.info("some info")")

其中a是

a = Jsonslurper.parseText(someContent)
当assert为true时,

eval语句有效,但当assert为false时,不能给我log.info。我发现我需要将log对象传递给eval。 log对象在我的脚本中是直接可用的。所以我正在尝试这个

eval.xy(a,log, "assert something == something: log.info("some info")")

但是给了我no such property a的错误。什么是错的,我怎么能纠正这个。谢谢!

编辑:实际通话时间为:

Eval.me('RespJson', RespJson, "assert ${RespNode}.toString() == '$aValue': log.info(\"${context.expand( '${#Project#assertValue}' )}\")")

给了我No such property: log,因此我正在尝试我在原帖中提到的电话

1 个答案:

答案 0 :(得分:2)

Eval.xy()将前两个参数分别绑定到名为xy的变量。无法将参数绑定到您选择的特定名称,就像使用Eval.me()一样。因此,如果您决定使用Eval.xy(),则必须相应地更改脚本:

Eval.xy(RespJson, log, "assert ${RespNode}.toString() == '$aValue': y.info(\"${context.expand( '${#Project#assertValue}' )}\")")

此外,如果您的本地变量RespNode扩展为涉及RespJson的字符串表达式(我怀疑它确实如此),那么您将不得不用{{RespJson替换每一个x 1}}。

更灵活的方法是使用GroovyShellBinding代替Eval,如下所示:

def binding = new Binding(RespJson: RespJson, log: log)
new GroovyShell(binding).evaluate("assert ${RespNode}.toString() == '$aValue': log.info(\"${context.expand( '${#Project#assertValue}' )}\")")