gpt4 book ai didi

unit-testing - 重写构造函数中调用的方法时,Groovy metaClass 失败?

转载 作者:行者123 更新时间:2023-12-04 04:25:27 24 4
gpt4 key购买 nike

我只是尝试编写这个简单的代码来测试使用 metaClass 的覆盖方法。

代码在这里:

class Hello {

public Hello()
{
Foo()
}

public void Foo()
{
println "old"
}

}

它有一个 Foo() 方法,该方法简单地打印“旧”,并由构造函数调用。

这是测试代码:
class HelloTest {

@Test
public void test() {

boolean methodFooWasCalled = false

Hello.metaClass.Foo = {-> println "new"
methodFooWasCalled = true
}

Hello hello = new Hello()

assertTrue methodFooWasCalled == true

}
}

我期望输出应该是“新的”,因为 Foo()已被覆盖。但它仍然打印“旧”。有谁知道它为什么失败?谢谢

最佳答案

以下作品:

class Hello {
Hello() {
Foo()
}
}

Hello.metaClass.Foo = {->
println "new"
}

new Hello()

以下内容也是如此:
class Hello {
Hello() {
invokeMethod('Foo', [] as Object[])
}

void Foo() { println "old" }
}

Hello.metaClass.Foo = {->
println "new"
}

new Hello()

这个很有趣; bar()调用内线 Foo()有效,而构造函数内部的无效:
class Hello {
Hello() {
Foo()
bar()
}

void Foo() { println "old foo"; bar() }
void bar() { println "old bar" }
}

Hello.metaClass {
Foo = {-> println "new foo" }
bar = { println "new bar" }
}

new Hello()

在构造函数上,Groovy 似乎不会首先检查元类的方法。我认为这是一个错误,我找不到与此相关的任何错误。填写 JIRA 怎么样? ?

关于unit-testing - 重写构造函数中调用的方法时,Groovy metaClass 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27489785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com