Po prostu próbowałem napisać ten prosty kod, aby przetestować nadpisywanie metod za pomocą metaClass.Groovy metaClass kończy się niepowodzeniem podczas przesłonięcia metody wywołanej w konstruktorze?
Kod jest tutaj:
class Hello {
public Hello()
{
Foo()
}
public void Foo()
{
println "old"
}
}
Ma metodę Foo(), która po prostu drukuje „starych” i był nazywany przez konstruktora.
Oto kod testu:
class HelloTest {
@Test
public void test() {
boolean methodFooWasCalled = false
Hello.metaClass.Foo = {-> println "new"
methodFooWasCalled = true
}
Hello hello = new Hello()
assertTrue methodFooWasCalled == true
}
}
Spodziewałem się, że wyjście powinno być „nowy”, ponieważ Foo()
zostało nadpisane. Ale nadal drukowane "stare". Czy ktoś wie, dlaczego się nie udaje? Dzięki
Tak, to wygląda na błąd. Złożyłem problem z JIRA. Dziękuję za Twoją odpowiedź! – danielZ
Mam ten sam problem, próbując zmienić metodę init(), która jest wywoływana z konstruktora. Czy możesz wskazać mi, proszę, kwestię JIRA? Thx –
https://issues.apache.org/jira/browse/GROOVY-7209 – mhsmith