Ho appena provato a scrivere questo semplice codice per testare i metodi di overriding con metaClass.La metaClass di Groovy non riesce quando il metodo di overriding viene chiamato nel costruttore?
Il codice è qui:
class Hello {
public Hello()
{
Foo()
}
public void Foo()
{
println "old"
}
}
Ha un metodo di Foo(), che stampa semplicemente "vecchio" ed è stato chiamato dal costruttore.
Ecco il codice di prova:
class HelloTest {
@Test
public void test() {
boolean methodFooWasCalled = false
Hello.metaClass.Foo = {-> println "new"
methodFooWasCalled = true
}
Hello hello = new Hello()
assertTrue methodFooWasCalled == true
}
}
mi aspettavo che l'uscita dovrebbe essere "nuovo" in quanto Foo()
è stato sovrascritto. Ma è ancora stampato "vecchio". Qualcuno sa perché fallisce? Grazie
Sì, sembra un bug. Ho presentato un problema JIRA. La ringrazio per la risposta! – danielZ
Ho lo stesso problema, provando a cambiare il metodo init(), che viene chiamato dal costruttore. Puoi indicarmi la questione JIRA? Thx –
https://issues.apache.org/jira/browse/GROOVY-7209 – mhsmith