EasyMockを使用してクラスTestMe
をユニットテストしていて、そのメソッドの1つ(たとえばmethod(N n)
)には、ネイティブメソッド(たとえばnativeMethod()
)を持つタイプN
のパラメータが必要です。Android/dalvikのJavaクラスのネイティブメソッドをオーバーライドすることはできますか?
class TestMe {
void method(N n) {
// Do stuff
n.nativeMethod();
// Do more stuff
}
}
method()
いくつかの点でN.nativeMethod()
を呼び出す必要がある、と私がいる問題は、Nのための私のEasymockモックオブジェクトは、ネイティブメソッドをオーバーライドすることができないということです。私はクラスNを所有していませんが、私は任意の方法でTestMe
をリファクタリングすることができます。
私は何もしないことnativeMethod
をオーバーライドする自分のクラスFakeN extends N
作ることを決めた:
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
}
}
をしかし、私はN.nativeMethod()
が呼び出されているものではないことが表示されますテストを実行すると、コンパイラは、文句はありませんしながら、 FakeN
のバージョン。
私はここで回避策がありますか?
これは私が[このページ](http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io)のコメントから考えたものですが、それはそう思われませんでした作業。私は戻って、何かを台無しにしているかどうかを確認します。 – scorpiodawg
ネイティブメソッドはネイティブではなくネイティブメソッドでオーバーライドできること、またその逆も可能であることがわかります。 'ネイティブ'は署名の一部ではないようです。 – scorpiodawg