首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据测试更改类的metaClass

如何根据测试更改类的metaClass
EN

Stack Overflow用户
提问于 2014-12-18 04:04:48
回答 1查看 82关注 0票数 0

我正在使用ExpandoMetaClass使服务在集成测试中始终返回成功,但我希望有一个实际失败的测试。

ExpandoMetaClass的用法示例:

代码语言:javascript
复制
static {
        ExpandoMetaClass someService = new ExpandoMetaClass(Object, false)
        someService.accessAnotherSystem = { return 'success' }
        someService.initialize()
        SomeService.metaClass = someService
    }

因此,我不能从集成测试中执行controller.someService.metaClass.accessAnotherSystem = { return 'failure'}

另请注意:这是一个webflow的集成测试。

EN

回答 1

Stack Overflow用户

发布于 2014-12-23 23:40:54

如果测试是自己运行的,则下面的测试运行得很好,但是,如果在它之前运行了另一个使用SomeService的测试,则ExpandoMetaClass将被覆盖。我将为这个问题打开另一个问题。

代码语言:javascript
复制
static {
    ExpandoMetaClass someService = new ExpandoMetaClass(Object, false)
    someService.invokeMethod = { String name, args ->
        def result = 'success'
        if(name.equals('accessAnotherSystem')
        {
            StackTraceUtils.sanitize(new Throwable()).stackTrace.each
            {
                if(it.methodName.equals('method_I_Want_failure')
                {
                    result = 'exception'
                }
            }
            return result
        }

        def validMethod = SomeService.metaClass.getMetaMethod(name, args)
        if (validMethod != null)
        {
            validMethod.invoke(delegate, args)
        }
        else
        {
            SomeService.metaClass.invokeMissingMethod(delegate, name, args)
        }
    }
    someService.initialize()
    SomeService.metaClass = someService
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27533910

复制
相关文章

相似问题

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