2012-06-07 11 views
8

Jestem jednostką testującą klasę TestMe za pomocą EasyMock, a jedna z jej metod (na przykład method(N n)) oczekuje parametru o typie N, który ma natywną metodę (na przykład nativeMethod()).Czy można zastąpić natywną metodę w klasie Java w systemie Android/dalvik?

class TestMe { 
    void method(N n) { 
     // Do stuff 

     n.nativeMethod(); 

     // Do more stuff 
    } 
} 

method() musi powołać N.nativeMethod() w pewnym momencie, a problem mam jest to, że moja EasyMock atrapa obiektu dla N nie jest w stanie zastąpić metodę natywną. Nie jestem właścicielem klasy N, ale mogę refaktoryzować TestMe w dowolny sposób.

postanowiłem stworzyć własną klasę FakeN extends N które zastępują nativeMethod robić nic:

class FakeN extends N { 
    FakeN(int pointer) { 
     super(pointer); 
    } 

    @Override 
    public void nativeMethod(Object o) { 
     // super.nativeMethod() is an actual native method defined as: 
     // public native void nativeMethod(Object o) 
     // 
     // IGNORE 
    } 
} 

ale gdy kompilator nie skarżą się, kiedy uruchomić test wydaje się, że N.nativeMethod() jest jedna jest wywoływany i nie FakeN s wersja.

Czy istnieje rozwiązanie, które można zastosować?

Odpowiedz

5

Metody native mogą zostać nadpisane, podobnie jak inne metody, chyba że są zadeklarowane jako final. Po prostu upewnij się, że dzwonisz pod numer TestMe.method(N n) z instancją FakeN.

+0

Tak właśnie myślałem na podstawie komentarzy na [tej stronie] (http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io), ale wydawało się, że praca. Wrócę i sprawdzę, czy coś zepsułem. – scorpiodawg

+3

Okazało się, że metody natywne mogą zostać nadpisane przez języki obce i na odwrót. "native" wydaje się nie być częścią podpisu. – scorpiodawg

Powiązane problemy