Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SOAPUI上下文变量-Groovy如何实现这一点?_Groovy_Soapui - Fatal编程技术网

SOAPUI上下文变量-Groovy如何实现这一点?

SOAPUI上下文变量-Groovy如何实现这一点?,groovy,soapui,Groovy,Soapui,如果这是一个有点愚蠢的问题的话,我向你们这些优秀的家伙们道歉 在SOAPUI中,我可以创建一个Groovy脚本,在该脚本中,我可以为运行上下文定义一个任意变量,以便以后检索 context.previouslyUndefinedVariable = 3 def num = context.previouslyUndefinedVariable Groovy的什么特性允许将以前未定义的变量添加到这样的对象中?我想了解更多 非常感谢 Groovy能够通过元编程向类动态添加方法 要了解更多信息,请

如果这是一个有点愚蠢的问题的话,我向你们这些优秀的家伙们道歉

在SOAPUI中,我可以创建一个Groovy脚本,在该脚本中,我可以为运行上下文定义一个任意变量,以便以后检索

context.previouslyUndefinedVariable = 3

def num = context.previouslyUndefinedVariable
Groovy的什么特性允许将以前未定义的变量添加到这样的对象中?我想了解更多


非常感谢

Groovy能够通过元编程向类动态添加方法

要了解更多信息,请参阅:


    • 对于SoapUI是如何实现的,公认的答案是一个有点糟糕的解释

      在本例中,
      context
      始终是某些SoapUI库java类的实例(例如
      WsdlTestRunContext
      ),这些都是
      Map
      的实现。您可以在映射中检查
      context.getClass()
      断言上下文

      在地图上查找属性时,Groovy使用getAt和putAt方法。您可以使用多种语法。所有这些都是等效的:

      context.someUndef
      context.'someUndef'
      context[someUndef]
      context['someUndef']
      context.getAt('someUndef')
      

      我喜欢使用上面任何包含引号的属性,这样GroovyEclipse就不会将其标记为缺少的属性

      同样有趣的是,Groovy在检查被称为属性的
      get
      方法之前会先查找
      getAt()
      方法

      例如,考虑评估<代码>“FO”。类< /代码>。String实例没有名为
      class
      的属性,也没有方法
      getAt(String)
      ,因此下一步它尝试的是查找具有该名称的“get”方法,即找到的
      getClass()
      ,我们得到的结果是:
      String

      但是对于映射,
      ['class':'bar'].class
      首先引用方法调用
      getAt('class')
      ,它将是
      'bar'
      。如果我们想知道它是什么类型的映射,我们必须更加具体并完整地编写:
      ['class':'bar'].getClass()
      ,它将是
      LinkedHashMap

      我们仍然必须指定
      getClass()
      ,即使
      Map
      没有匹配的键,因为
      ['foo':'bar'].class
      仍然意味着
      ['foo':'bar'].getAt('class')
      ,这将是
      null

      context.someUndef = 3
      context.'someUndef' = 3
      context[someUndef] = 3
      context['someUndef'] = 3
      context.putAt('someUndef', 3)