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 FakeNs version.
Is there a workaround here that I can use?
The
nativemethods can be overridden just like any other methods, unless they are declaredfinal. Just be sure that you're callingTestMe.method(N n)with an instance ofFakeN.