Ich bin Unit-Tests eine Klasse TestMe
mit EasyMock, und eine seiner Methoden (sagen method(N n)
) erwartet einen Parameter des Typs N
, die eine native Methode hat (etwa nativeMethod()
).Kann eine native Methode in einer Java-Klasse in Android/dalvik überschrieben werden?
class TestMe {
void method(N n) {
// Do stuff
n.nativeMethod();
// Do more stuff
}
}
method()
muss N.nativeMethod()
an einem gewissen Punkt berufen, und das Problem, das ich habe, ist, dass mein EasyMock Mock-Objekt für N nicht in der Lage ist, die native Methode außer Kraft zu setzen. Ich besitze Klasse N nicht, aber ich kann TestMe
in irgendeiner notwendigen Weise umgestalten.
ich beschlossen, meine eigene Klasse FakeN extends N
die nativeMethod
Vorrang zu machen, nichts zu tun:
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
}
}
aber während der Compiler, nicht beschweren, wenn ich den Test laufen scheint es, dass N.nativeMethod()
derjenige wird aufgerufen und nicht FakeN
s Version.
Gibt es hier einen Workaround, den ich verwenden kann?
Das ist, was ich aus den Kommentaren dachte an [diese Seite] (http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io), aber es schien nicht zu Arbeit. Ich werde zurückgehen und nachsehen, ob ich etwas vermasselt habe. – scorpiodawg
Stellt fest, dass native Methoden durch nicht-native überschrieben werden können und umgekehrt. 'nativ' scheint nicht Teil der Signatur zu sein. – scorpiodawg