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

09-12 22:49