9

我正在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()是被调用的版本而不是FakeNs 版本。

这里有我可以使用的解决方法吗?

4

1 回答 1

8

这些native方法可以像任何其他方法一样被覆盖,除非它们被声明final。只要确保您TestMe.method(N n)使用FakeN.

于 2012-06-07T22:33:15.050 回答