簡體   English   中英

Robolectric + Mockito

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM