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ć?
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
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