亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Android測(cè)試:Testing Apps on Android

n7then / 2417人閱讀

摘要:是一款第三方的開(kāi)源的單元測(cè)試框架。當(dāng)然,您也可以通過(guò)集成測(cè)試框架來(lái)擴(kuò)展測(cè)試能力,例如可以集成在本地單元測(cè)試中測(cè)試調(diào)用,以及集成或在儀器測(cè)試中演練用戶(hù)交互。

原文:https://developer.android.com...

測(cè)試你的App是開(kāi)發(fā)過(guò)程中的重要組成部分。通過(guò)對(duì)應(yīng)用程序持續(xù)的運(yùn)行測(cè)試,你可以驗(yàn)證程序的正確性、功能和可用在發(fā)布之前。

測(cè)試還提供了以下優(yōu)點(diǎn):

快速反饋失敗。

開(kāi)發(fā)周期的早期問(wèn)題檢測(cè)。

安全地重構(gòu)代碼,讓你優(yōu)化代碼而不用擔(dān)心回歸。

穩(wěn)定開(kāi)發(fā)速度,幫助你減少技術(shù)債務(wù)。

這里的特指測(cè)試通過(guò)代碼實(shí)現(xiàn)的“單元”測(cè)試。所以,它可以更早、更快的幫我們發(fā)現(xiàn)問(wèn)題,使我們的代碼重構(gòu)更有信心;單元測(cè)試雖然前期編寫(xiě)會(huì)比較耗時(shí),但是它可以有效的代碼的質(zhì)量,不會(huì)導(dǎo)致項(xiàng)目后期代碼充滿(mǎn)壞味道,嚴(yán)重拖慢開(kāi)發(fā)進(jìn)度;所以,減少你技術(shù)債務(wù)。

資源

在Android測(cè)試庫(kù)、Android平臺(tái)和開(kāi)源社區(qū)都提供了幫助你編寫(xiě)Android應(yīng)用測(cè)試的工具:

Espesso

Espresso是android應(yīng)用開(kāi)發(fā)自帶測(cè)試庫(kù)。他是一款白盒風(fēng)格的UI測(cè)試工具。UI測(cè)試就都是黑盒的么?為什么會(huì)是白盒風(fēng)格。

說(shuō)白盒是因?yàn)?,通過(guò)Espresso編寫(xiě)測(cè)試調(diào)用Android控件的方式和 Android開(kāi)發(fā)中是一樣的。
來(lái)看一段Android開(kāi)發(fā)中,Activity中編寫(xiě)的代碼。

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

通過(guò) R.id.edit_message 調(diào)用布局文件中輸入框中的內(nèi)容,并轉(zhuǎn)交到另外一個(gè)Activity處理。

再來(lái)看一段 Espesso 的測(cè)試代碼:

@Test
public void InputEditCase() throws InterruptedException{

    onView(withId(R.id.edit_message)).perform(typeText(STRING_TO_BE_TYPED));
    onView(withId(R.id.send_button)).perform(click());

    onView(withId(R.id.display_message)).check(matches(isDisplayed()));
    onView(withId(R.id.display_message)).check(matches(withText("hello," +STRING_TO_BE_TYPED)));
}

同樣使用的是 R.id.edit_message 的定位方式來(lái)查找控件,是不是白盒?我們通常的黑盒UI自動(dòng)化測(cè)試是通過(guò)UI屬性查看工具(如:UIAutomatorViewer)確定元素的屬性來(lái)進(jìn)行定位的。Espesso不需要,你看代碼就好了,準(zhǔn)確點(diǎn)是看Android的布局文件的控件定義。

但是,Espesso的運(yùn)行是基于 SDK 的,所以,要想運(yùn)行一條用例必須在Android模擬器(或真機(jī))上安裝App,啟動(dòng)App,然后基于UI的操作來(lái)運(yùn)行測(cè)試用例。

Robolectric


Robolectric是一款第三方的開(kāi)源的Android單元測(cè)試框架。運(yùn)行在JVM上,所以它運(yùn)行速度上會(huì)比 Espesso快上很多。

@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {

    @Test
    public void clickingButton_shouldChangeResultsViewText() throws Exception {
        MyActivity activity = Robolectric.setupActivity(MyActivity.class);

        Button button = (Button) activity.findViewById(R.id.button);
        TextView results = (TextView) activity.findViewById(R.id.results);

        button.performClick();
        assertThat(results.getText().toString()).isEqualTo("Robolectric Rocks!");
    }
}

來(lái)一段官方Demo,robolectric的做法是通過(guò)實(shí)現(xiàn)一套JVM能運(yùn)行的Android代碼,然后在單元測(cè)試運(yùn)行的時(shí)候去截取android相關(guān)的代碼調(diào)用,然后轉(zhuǎn)到他們的他們實(shí)現(xiàn)的代碼去執(zhí)行這個(gè)調(diào)用的過(guò)程。

你不明白原理也沒(méi)關(guān)系,反正知道Robolectric的運(yùn)行不需要你真正的打開(kāi)App去執(zhí)行測(cè)試,就像運(yùn)行一段普通的Java代碼一樣。所以速度上當(dāng)然就很快了。

AndroidJUnitRunner


AndroidJUnitRunner本質(zhì)上不算是個(gè)測(cè)試工具,它只是Google基于Junit針對(duì)Anroid封裝的一個(gè)測(cè)試用例運(yùn)行器而已。至于它用來(lái)運(yùn)行Espesso還是Uiautomator的用例都是可以的。那Robolectric呢?沒(méi)看到上面的例子中Robolectric有自己的運(yùn)行器叫RobolectricTestRunner

@RunWith(AndroidJUnit4.class)
public class MainActiveTest{
 
   ……

}

如果看到測(cè)試類(lèi)是用 AndroidJUnit4 注釋的,說(shuō)明用的就是AndroidJUnitRunner運(yùn)行器的。

測(cè)試應(yīng)用


最后,更好的編寫(xiě)測(cè)試用例的平臺(tái),當(dāng)然是Google家的親兒子了。器大活好不粘人?。ìF(xiàn)在才發(fā)現(xiàn)不是去幼兒園的車(chē),晚了,把車(chē)門(mén)給我捍死,一個(gè)都不準(zhǔn)下車(chē)。)

Android Studio 以簡(jiǎn)化測(cè)試為設(shè)計(jì)宗旨。 您只需完成幾次點(diǎn)擊,便可建立一個(gè)在本地 JVM 上運(yùn)行的 JUnit 測(cè)試,或建立一個(gè)在設(shè)備上運(yùn)行的儀器測(cè)試。

當(dāng)然,您也可以通過(guò)集成測(cè)試框架來(lái)擴(kuò)展測(cè)試能力,例如可以集成?Mockito?在本地單元測(cè)試中測(cè)試 Android API 調(diào)用,以及集成?Espresso?或?UI Automator?在儀器測(cè)試中演練用戶(hù)交互。
您可以利用?Espresso 測(cè)試記錄器自動(dòng)生成 Espresso 測(cè)試。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/8789.html

相關(guān)文章

  • React Native Vs. Xamarin Vs. Ionic Vs. Flutter

    React Native Vs. Xamarin Vs. Ionic Vs. Flutter:Which Is Best For Cross-Platform Mobile App Development? While developing Native Mobile Apps, Android apps are written in Java, and iOS ones in Swift and...

    Clect 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<