2012-06-07 10 views
8

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のバージョン。

私はここで回避策がありますか?

答えて

5

nativeメソッドは、finalと宣言されていない限り、他のメソッドと同様にオーバーライドできます。 TestMe.method(N n)FakeNのインスタンスを呼び出していることを確認してください。

+0

これは私が[このページ](http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io)のコメントから考えたものですが、それはそう思われませんでした作業。私は戻って、何かを台無しにしているかどうかを確認します。 – scorpiodawg

+3

ネイティブメソッドはネイティブではなくネイティブメソッドでオーバーライドできること、またその逆も可能であることがわかります。 'ネイティブ'は署名の一部ではないようです。 – scorpiodawg

関連する問題