我正在爲我的Android代碼編寫一些POJO測試。我想要在JDK本地運行它們(不適用於模擬器上的Dalvik) - 對於速度,JUnit 4,Mockito以及無需設備就可以運行無頭程序 - 因此我有一個單獨的「Java」項目蝕。使用JUnit和JDK測試Android代碼
如果我測試的方法恰好引用了Android SDK的任何內容,例如android.util.Log
,測試失敗 - 這是有道理的,因爲android.jar
不在類路徑中。要重現我有這樣的測試案例:
public class FooTests {
@Test
public void testFoo() {
android.util.Log.d("x", "y");
}
}
如果我明確地添加android.jar
到測試項目的類路徑,我得到這樣
java.lang.RuntimeException: Stub!
at android.util.Log.d(Log.java:7)
at com.example.FooTests.testFoo(FooTests.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
例外有沒有一種方法,使無嘲諷每代碼工作Android SDK依賴的最後一點?也許嘲笑android.jar
已經存在?
編輯:現在我結束了包裝類,如android.util.Log
並將它們注入的情況下,對經典的基於IOC的測試。當我需要時,Scott的PowerMock建議是我的下一步。
LATER EDIT:Robolectric!
+1好點,我會嘗試PowerMock。除https://sites.google.com/site/androiddevtesting/之外的任何相關鏈接? – orip
我之前沒有看到該鏈接,但它非常出色,感謝分享,當我試圖找出模擬android jar類所需的各種方法時,我發現自己經常在他們的網站上引用Powermock「usage」部分:http://code.google.com/p/ powermock /。 – Scott