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

本地單元測(cè)試中 Build.VERSION.SDK_INT 的存根值

Stub value of Build.VERSION.SDK_INT in Local Unit Test(本地單元測(cè)試中 Build.VERSION.SDK_INT 的存根值)
本文介紹了本地單元測(cè)試中 Build.VERSION.SDK_INT 的存根值的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我想知道是否有任何方法來(lái)存根 Build.Version.SDK_INT 的值?假設(shè)我在 ClassUnderTest 中有以下幾行:

I am wondering if there is anyway to stub the value of Build.Version.SDK_INT? Suppose I have the following lines in the ClassUnderTest:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    //do work
}else{
    //do another work
}

如何覆蓋所有代碼?

我的意思是我想用不同的 SDK_INT 運(yùn)行兩個(gè)測(cè)試來(lái)輸入兩個(gè)塊.

I mean I want to run two tests with different SDK_INT to enter both blocks.

在 android local 單元測(cè)試中是否可以使用 Mockito/PowerMockito?

Is it possible in android local unit tests using Mockito/PowerMockito?

謝謝

推薦答案

使用反射改變值.

 static void setFinalStatic(Field field, Object newValue) throws Exception {
    field.setAccessible(true);

    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

    field.set(null, newValue);
 }

然后

 setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 123);

經(jīng)過(guò)測(cè)試.有效.

更新:有一種更清潔的方法.

創(chuàng)建接口

interface BuildVersionProvider {

    fun currentVersion(): Int

}

實(shí)現(xiàn)接口

class BuildVersionProviderImpl : BuildVersionProvider {

    override fun currentVersion() = Build.VERSION.SDK_INT

}

只要您需要當(dāng)前的構(gòu)建版本,就可以通過(guò)接口將此類作為構(gòu)造函數(shù)參數(shù)注入.然后在測(cè)試時(shí)創(chuàng)建一個(gè)SUT(被測(cè)系統(tǒng))對(duì)象.您可以自己實(shí)現(xiàn)接口.這種處理方式可能需要更多代碼,但遵循 SOLID 原則,并為您提供可測(cè)試的代碼,而不會(huì)弄亂反射和系統(tǒng)變量.

Inject this class as a constructor argument through the interface whenever you want current build version. Then in the tests when creating a SUT (System Under Test) object. You can implement the interface yourself. This way of doing things may be more code but follows the SOLID principles and gives you testable code without messing with reflection and system variables.

這篇關(guān)于本地單元測(cè)試中 Build.VERSION.SDK_INT 的存根值的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(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 操作標(biāo)簽的多行 EditText)
How to detect the swipe left or Right in Android?(如何在 Android 中檢測(cè)向左或向右滑動(dòng)?)
Prevent dialog dismissal on screen rotation in Android(防止在Android中的屏幕旋轉(zhuǎn)對(duì)話框解除)
How do I handle ImeOptions#39; done button click?(如何處理 ImeOptions 的完成按鈕點(diǎn)擊?)
How do you set EditText to only accept numeric values in Android?(您如何將 EditText 設(shè)置為僅接受 Android 中的數(shù)值?)
主站蜘蛛池模板: 午夜不卡福利视频 | 91视频在线看 | 亚洲综合第一页 | 91精品久久久久久综合五月天 | 美女日皮网站 | 欧美一区二区三区 | 国产激情视频网 | 亚洲精品一区二三区不卡 | 国产激情在线 | 性色综合| 久久中文字幕一区 | 美女福利视频 | www.成人在线视频 | 国产一级毛片视频 | 精品国产乱码久久久久久丨区2区 | 日本综合在线观看 | 亚洲区视频 | 亚洲成人一级 | 中文字幕1区2区3区 日韩在线视频免费观看 | 五月天婷婷丁香 | 成人在线免费视频 | 成人免费网站www网站高清 | 日韩免费一区二区 | 羞羞视频在线观看网站 | 欧美日产国产成人免费图片 | 激情91| 91天堂网| 亚洲一区二区三区四区五区中文 | 嫩草视频网 | 欧美在线一区二区三区 | 欧美激情视频一区二区三区在线播放 | 日本久久精品视频 | 亚洲精品国产电影 | 精品成人av | av免费在线观看网站 | 中文av在线播放 | 特黄色一级毛片 | 免费一看一级毛片 | 日本成人二区 | 亚洲444eee在线观看 | a毛片 |