我正在TestMe
使用 EasyMock 对一个类进行单元测试,它的一个方法(比如method(N n)
)需要一个类型的参数,N
该参数具有本机方法(比如nativeMethod()
)。
class TestMe {
void method(N n) {
// Do stuff
n.nativeMethod();
// Do more stuff
}
}
method()
需要N.nativeMethod()
在某个时候调用,而我遇到的问题是我的 Easymock 模拟对象 N 无法覆盖本机方法。我不拥有 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
s 版本。
这里有我可以使用的解决方法吗?