我正在尝试重新定义类的方法以用于测试目的 .
为此,我使用了Groovy的元编程功能 .
不幸的是,这种方法是通过我自己控制的一些代码进行内省调用的 .
在这种情况下,调用真实方法而不是被覆盖的版本 .
这是一个groovy脚本示例,演示了这一点:
class Dummy { void sayHello() {println "Hi"} }
def dummy = new Dummy()
dummy.sayHello()
dummy.metaClass.sayHello = {println "Hello world"}
dummy.sayHello()
def method = dummy.class.getDeclaredMethod("sayHello")
method.invoke(dummy)
此代码输出为:
嗨你好世界嗨
但我希望最后一行成为'Hello World'
我试图覆盖Method.invoke方法,但它是一团糟 .
是否有一种首选的方法告诉Groovy,当检测到对Dummy#sayHello的调用时,它还应该拦截对Method.invoke的调用?