我正在使用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()
版本。
我可以使用这里的解决方法吗?
答案 0 :(得分:7)
native
方法可以像任何其他方法一样被覆盖,除非它们被声明为final
。请确保您使用TestMe.method(N n)
的实例调用FakeN
。