[英]Robolectric + Mockito
嘗試使用Robolectric構建android單元測試。 每當我需要模擬屬於我的項目的方法時,創建Shadow類都會變得有些沉重。 我認為在這種情況下使用Mockito會更輕松,更輕松。
但是,當我嘗試使用Mockito方法時,出現錯誤java.lang.IllegalArgumentException:dexcache == null(找不到默認值;請考慮設置'dexmaker.dexcache'系統屬性)
為了解決這個問題,我相信需要通過調用來設置dexcache屬性
System.setProperty(“ dexmaker.dexcache”,getInstrumentation()。getTargetContext()。getCacheDir()。getPath());
但是我不知道在Robolectric中可以調用getInstrumentation。 請提出一種推薦的方法來模擬我在Robolectric中的項目方法。
您可以將Mockito與Robolectric一起使用; 但是,您需要確保添加的是“正常”的Mockito依賴關系,而不是Mockito-Android或dexmaker依賴關系。
Mockito通過生成類來工作; 在台式機JRE(例如單元測試環境)上,這意味着生成Java CLASS文件,而在Android設備和仿真器上,這意味着生成DEX文件。 但是,即使類路徑上存在DeockMaker,Mockito也會趁機使用DexMaker,即使在Robolectric單元測試中在模擬器之外運行時也是如此。 調整依賴性,以確保不包括dexmaker,這將避免dexmaker或dexcache出現任何問題。
分開思考Robolectric和Mockito的一個好方法是
Mockito:模擬並驗證您的Java類/非Android框架依賴項
Robolectric:在需要時提供TestRunner和有效的Android Framework元素,例如Intent,Context
Build.gradle依賴項
dependencies {
...
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.0'
testCompile 'org.mockito:mockito-core:1.10.19'
}
機器人測試跑步者
@RunWith(RobolectricTestRunner.class)
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
測試愉快!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.