替换静态方法仅在从构造函数调用时才替换

时间:2016-04-08 13:47:35

标签: groovy static-methods

我有以下代码

class ClassA {
    static String getA() {
        'A'
    }

    String string

    ClassA() {
        println getA()
        println ClassA.getA()
        string = getA()
    }
}


// Mocking
ClassA.metaClass.static.getA = { -> 'B' }
ClassA.metaClass.getA = { -> 'B' }
assert ClassA.getA() == 'B'

def test = new ClassA()
assert test.getA() == 'B'
assert test.string == 'B'

最后一个断言

assert test.string == 'B'

没有通过。所以我理解的是getA()在构造函数和短名称(不是ClassA.getA()而只是getA())中调用时不会被替换

有谁知道为什么会发生这种情况和/或如何修复它?

编辑:当在字段初始化String string = getA()中使用时,该方法会返回正确的值。

0 个答案:

没有答案