久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

帶有 Mockito 間諜的 Robolectric buildActivity()?

Robolectric buildActivity() with Mockito spy?(帶有 Mockito 間諜的 Robolectric buildActivity()?)
本文介紹了帶有 Mockito 間諜的 Robolectric buildActivity()?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

在我看來,使用 Robolectric 的生命周期實用程序(從 Robolectric.buildActivity() 開始)構(gòu)建 Activity 單元測試和使用 Mockito 間諜監(jiān)視同一個 Activity 是相互排斥的.

It seems to me that building an Activity unit test with Robolectric's lifecycle utilities (starting with Robolectric.buildActivity()) and spying on the same Activity with a Mockito spy are mutually exclusive.

因為buildActivity()控制了Activity對象的構(gòu)建,所以唯一給Activity添加spy的地方就是調(diào)用buildActivity()之后.但是,在事后添加間諜時,間諜無法正常工作.

Because buildActivity() controls the construction of the Activity object, the only place to add a spy for the Activity is after calling buildActivity(). However, the spy doesn't function properly when it's added after the fact.

在監(jiān)視 ActivityController 生命周期方法的副作用時尤其如此,例如 create()start()恢復().我認為這是因為 ActivityController 持有對真實"Activity 對象的引用,而不是后來添加的間諜.

This is especially true when spying for side effects of ActivityController lifecycle methods such as create(), start() and resume(). I assume this is because the ActivityController holds a reference to the "real" Activity object and not the spy that was added later.

那么有什么方法可以監(jiān)視正在使用 Robolectric 進行單元測試的 Activity,以便在通過 Robolectric 的 ActivityController 調(diào)用生命周期方法時,間諜可以正常工作?

So is there any way to spy an Activity that's being unit tested with Robolectric, such that the spy works properly when calling the lifecycle methods via Robolectric's ActivityController?

推薦答案

答案是用反射替換ActivityController中真實的"Activity對象.p>

The answer is using the reflection to replace the "real" Activity object in ActivityController.

@Test
public void someTestMethod() throws NoSuchFieldException, IllegalAccessException {
    ActivityController<LoginActivity> ac = Robolectric.buildActivity(LoginActivity.class);
    LoginActivity spiedActivity = spy(ac.get());

    replaceComponentInActivityController(ac, spiedActivity);

    ac.create();

    // do your work
 }

public static void replaceComponentInActivityController(ActivityController<?> activityController, Activity activity)
        throws NoSuchFieldException, IllegalAccessException {
    Field componentField = ComponentController.class.getDeclaredField("component");
    componentField.setAccessible(true);
    componentField.set(activityController, activity);
}

我用Robolectric 3.1測試過,沒問題.

I test it by Robolectric 3.1, and it's ok.

這篇關(guān)于帶有 Mockito 間諜的 Robolectric buildActivity()?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event(EditText:禁用文本選擇處理程序單擊事件上的粘貼/替換菜單彈出)
Multiline EditText with Done SoftInput Action Label on 2.3(2.3 上帶有完成 SoftInput 操作標簽的多行 EditText)
How to detect the swipe left or Right in Android?(如何在 Android 中檢測向左或向右滑動?)
Prevent dialog dismissal on screen rotation in Android(防止在Android中的屏幕旋轉(zhuǎn)對話框解除)
How do I handle ImeOptions#39; done button click?(如何處理 ImeOptions 的完成按鈕點擊?)
How do you set EditText to only accept numeric values in Android?(您如何將 EditText 設(shè)置為僅接受 Android 中的數(shù)值?)
主站蜘蛛池模板: 91在线视频免费观看 | 日韩欧美专区 | 国产一区影院 | 欧美a级成人淫片免费看 | 在线观看中文字幕 | 影视先锋av资源噜噜 | 国产乱码精品一区二区三区忘忧草 | 91精品国产综合久久久久久丝袜 | 成人日韩 | 瑟瑟免费视频 | 成人在线 | 欧美一级黄色免费 | 毛片的网址 | 一区二区三区日韩 | 日韩免费一区二区 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 毛片在线看片 | 欧美精品一区二区免费 | 在线婷婷 | 欧美日韩在线播放 | 久久久久久亚洲精品 | 免费视频成人国产精品网站 | 日本一区二区高清不卡 | 国产成人一区二 | 亚洲人成在线观看 | 亚洲综合一区二区三区 | 久草网站 | 日皮视频免费 | 亚洲精品乱码久久久久久久久久 | 美女一区| 黄色片在线免费看 | 岛国av免费观看 | 精品亚洲视频在线 | 狠狠骚 | 麻豆精品一区二区三区在线观看 | 成年人在线观看视频 | 久久久蜜臀国产一区二区 | 视频第一区| 国产黑丝在线 | 青青草综合 | 亚洲精品视频网站在线观看 |