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

时间:2012-06-07 22:02:30

标签: java android override easymock native-methods

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

nativeMethod()

class TestMe { void method(N n) { // Do stuff n.nativeMethod(); // Do more stuff } } 需要在某个时刻调用method(),而我遇到的问题是我的N的Easymock模拟对象无法覆盖本机方法。我没有N级,但我可以以任何必要的方式重构N.nativeMethod()

我决定制作我自己的班级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()版本。

我可以使用这里的解决方法吗?

1 个答案:

答案 0 :(得分:7)

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