9

TestMeEasyMock を使用してクラスの単体テストを行っていますが、そのメソッドの 1 つ (たとえば ) は、ネイティブ メソッド (たとえば ) を持つmethod(N n)型のパラメータを期待しています。NnativeMethod()

class TestMe {
    void method(N n) {
        // Do stuff

        n.nativeMethod();

        // Do more stuff
    }
}

method()ある時点で呼び出す必要がN.nativeMethod()あり、私が抱えている問題は、N の Easymock モック オブジェクトがネイティブ メソッドをオーバーライドできないことです。私はクラス N を所有していませんがTestMe、必要に応じてリファクタリングできます。

FakeN extends NオーバーライドnativeMethodして何もしない独自のクラスを作成することにしました。

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

ここで使用できる回避策はありますか?

4

1 に答える 1

8

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

于 2012-06-07T22:33:15.050 に答える