我正在使用 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)
即可。