Estoy probando la unidad de una clase TestMe
usando EasyMock, y uno de sus métodos (digamos method(N n)
) espera un parámetro del tipo N
que tiene un método nativo (digamos nativeMethod()
).¿Es posible anular un método nativo en una clase Java en Android/dalvik?
class TestMe {
void method(N n) {
// Do stuff
n.nativeMethod();
// Do more stuff
}
}
method()
necesita invocar N.nativeMethod()
en algún momento, y el problema que estoy teniendo es que mi EasyMock objeto de burla para N no es capaz de reemplazar el método nativo. No soy dueño de la clase N pero puedo refactorizar TestMe
de cualquier forma que sea necesaria.
decidí hacer mi propia clase FakeN extends N
que anula nativeMethod
no hacer nada:
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
}
}
pero mientras que el compilador no se queja, cuando corro la prueba parece ser que N.nativeMethod()
es el que está siendo invocado y no FakeN
s versión.
¿Hay alguna solución aquí que pueda usar?
Eso es lo que pensé de los comentarios en [esta página] (http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io) pero no parecía trabajo. Volveré y comprobaré si arruiné algo. – scorpiodawg
Resulta que los métodos nativos pueden ser reemplazados por no nativos y viceversa. 'native' parece no ser parte de la firma. – scorpiodawg