是否可以在Android/dalvik中的Java类中覆盖本机方法



我正在使用 EasyMock 对类TestMe进行单元测试,它的方法之一(比如method(N n))需要一个具有本机方法的 N 类型的参数(比如 nativeMethod())。

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的版本。

这里有可以使用的

解决方法吗?

可以像任何其他方法一样重写native方法,除非它们被声明为final。只要确保您使用 FakeN 的实例调用TestMe.method(N n)即可。

最新更新