2012-06-07 57 views
8

我使用EasyMock對一個類TestMe進行單元測試,其中一種方法(比如說method(N n))需要一個N類型的參數,該參數有一個本地方法(比如nativeMethod())。是否可以重寫Android/dalvik中的Java類中的本地方法?

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 s版本。

有沒有我可以使用的解決方法?

回答

5

native方法可以像任何其他方法一樣被覆蓋,除非它們被聲明爲final。只要確保你打電話TestMe.method(N n)FakeN的實例。

+0

這就是我從[本頁](http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io)的評論中想到的,但它似乎並沒有工作。我會回去看看我是否搞砸了。 – scorpiodawg

+3

原來的方法可以被非本地方法覆蓋,反之亦然。 'native'似乎不是簽名的一部分。 – scorpiodawg

相關問題