Groovy 元类,模拟具有 throws 子句的服务方法

Posted

技术标签:

【中文标题】Groovy 元类,模拟具有 throws 子句的服务方法【英文标题】:Groovy metaclass, mocking a service method that has throws clause 【发布时间】:2016-12-15 07:57:27 【问题描述】:

我有一个抽象服务:

abstract class ParentService     
    abstract Map someMethod() throws NumberFormatException    

还有另一个扩展类的服务:

class ChildService extends ParentService 
    @Override        
    Map someMethod() throws NumberFormatException 
        //Business Logic
    

我想使用 groovy 元类来模拟 someMethod()。我需要模拟这种方法来为ChildService 编写测试用例。这就是我为嘲笑所做的:

ChildService.metaClass.someMethod = -> "Mocked method" 但这不起作用,调用总是从服务执行实际方法。这里需要做什么?我错过了什么吗?请注意,我只需要模拟一种方法,而不是整个服务。

【问题讨论】:

【参考方案1】:

也许你可以在实例上模拟方法?

def child = new ChildService()
child.metaClass.someMethod =  -> "Mocked method" 

【讨论】:

我试图重现它并且它正在工作,所以它不工作的原因必须在其他地方。你能展示你的整个测试方法吗?您也可以尝试将“模拟方法”更改为映射。也许由于返回类型不匹配而无法正常工作?

以上是关于Groovy 元类,模拟具有 throws 子句的服务方法的主要内容,如果未能解决你的问题,请参考以下文章

Groovy:为接口委托元类?

在 Groovy 中,实例的元类与其类的元类有啥区别

Grails 和 Groovy 元类包名称约定

避免在不同的 Groovy 脚本之间共享 Java 元类

Groovy 元类的范围?

groovy 元类替换超类方法