我正在使用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模拟对象无法覆盖 native 方法。我不拥有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
。只要确保您使用TestMe.method(N n)
实例调用FakeN
即可。