首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测SoapUI groovy脚本中的调用方实例?

如何检测SoapUI groovy脚本中的调用方实例?
EN

Stack Overflow用户
提问于 2011-11-30 16:06:06
回答 1查看 925关注 0票数 2

SoapUI项目可以在加载时随机运行脚本。使用日志和项目变量调用Load脚本。

在我的共享库中,我有一个方法- addAsserts(),它遍历整个项目并将模式遵从性断言添加到SOAP测试步骤中。在我的加载脚本中,我调用了共享方法

代码语言:javascript
运行
复制
addAsserts(this) 

将“this”作为参数传递,并将closure.delegate设置为addAsserts方法中的“project”变量,使其可在闭包范围内访问

addAsserts方法在sharedUtil.groovy中定义:

代码语言:javascript
运行
复制
static def addAsserts(that){
        def closure={
            project.testSuites.each { testSuiteName, testSuiteObject -> 
                testSuiteObject.testCases.each { testCaseName, testCaseObject ->
                    testCaseObject.testSteps.each { testStepName, testStepObject -> 
                        if ("class com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep" == testStepObject.getClass().toString() ) {
                            log.info "adding 'Schema Compliance' assertion to ${testSuiteName}/${testCaseName}/${testStepName}"
                            testStepObject.addAssertion('Schema Compliance')
                        }
                    }
                }
            }
        }//closure

    closure.delegate=that  // <--- i would like NOT to pass 'that' as parameter
                           // but rather detect in runtime with some kind of
                           // getCallerInstance() method
    return closure.call()
}

问题:

是否可以使用某种getCallerInstance()方法在运行时检测调用实例?

EN

回答 1

Stack Overflow用户

发布于 2011-11-30 16:12:59

不我不相信这是可能的。也不在Java中(您可以使用一些可怕的黑客攻击查找调用类的名称/方法,但不能找到类本身的实例)

编辑...

使用类别可能是可能的(但我对SoapUI没有经验,所以我不知道这种技术是否适合)

假设我们有一个定义如下的类Example

代码语言:javascript
运行
复制
class Example {
  String name
}

然后,我们可以编写一个非常类似于示例代码的类,在本例中,该类将设置闭包的委托,闭包将打印出委托的name属性(因为我们已经将解决策略设置为DELEGATE_ONLY)。

代码语言:javascript
运行
复制
class AssetAddingCategory {
  static def addAsserts( that ) {
    def closure = {
      "Name of object: $name"
    }
    
    closure.delegate = that
    closure.resolveStrategy = Closure.DELEGATE_ONLY
    closure.call()
  }
}

稍后,在我们的代码中,可以这样做:

代码语言:javascript
运行
复制
def tim = new Example( name:'tim' )

use( AssetAddingCategory ) {
  println tim.addAsserts()
}

这个会打印出来

代码语言:javascript
运行
复制
Name of object: tim
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8329029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档