Is it possible to override a native method in a Java class in Android/dalvik?
android, easymock, java, native-methods, overriding
Solution
The `native` methods can be overridden just like any other methods, unless they are declared `final`. Just be sure that you're calling `TestMe.method(N n)` with an instance of `FakeN`.
Problem
I am unit testing a class `TestMe` using EasyMock, and one of its methods (say `method(N n)`) expects a parameter of type `N` which has a native method (say `nativeMethod()`). ``` class TestMe { void method(N n) { // Do stuff n.nativeMethod(); // Do more stuff } } ``` `method()` needs to invoke `N.nativeMethod()` at some point, and the problem I'm having is that my Easymock mock object for N is unable to override the native method. I do not own class N but I can refactor `TestMe` in any way necessary. I decided to make my own class `FakeN extends N` which overrides `nativeMethod` to do nothing: ``` 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 } } ``` but while the compiler does not complain, when I run the test it appears that `N.nativeMethod()` is the one being invoked and not `FakeN`s version. Is there a workaround here that I can use?