Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android官方開發文檔Training系列課程中文版:Activity測試之創建功能性測試

Android官方開發文檔Training系列課程中文版:Activity測試之創建功能性測試

編輯:關於Android編程

原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html

功能性測試包括模擬用戶操作之類的組件驗證。例如開發者可以通過功能性測試來驗證在用戶執行了UI操作之後Activity是否啟動了Activity。

如要為Activity創建功能性測試,測試類應當繼承ActivityInstrumentationTestCase2。與ActivityUnitTestCase不同,ActivityInstrumentationTestCase2既可以與Android系統通信,又能使程序可以接收鍵盤輸入事件與屏幕點擊事件。

驗證功能行為

一般功能性測試可能會有以下測試目的:

驗證在某個UI控制器被按下後,目標Activity是否被啟動。 驗證目標Activity是否將在啟動之前的用戶輸入數據正確顯示。

開發者所實現的代碼可能如下:

@MediumTest
public void testSendMessageToReceiverActivity() {
    final Button sendToReceiverButton = (Button) 
            mSenderActivity.findViewById(R.id.send_message_button);
    final EditText senderMessageEditText = (EditText) 
            mSenderActivity.findViewById(R.id.message_input_edit_text);
    // Set up an ActivityMonitor
    ...
    // Send string input value
    ...
    // Validate that ReceiverActivity is started
    ...
    // Validate that ReceiverActivity has the correct data
    ...
    // Remove the ActivityMonitor
    ...
}

測試框架會等待ReceiverActivity啟動,否則的話將會在超時後返回null。如果ReceiverActivity啟動,那麼ActivityMonitor則會收到一個命中。開發者可以通過斷言方法來驗證ReceiverActivity是否被啟動,命中數是否會如所期望的那樣有所增長。

設置ActivityMonitor

如果需要監視Activity,可以注冊ActivityMonitor。當目標Activity啟動時,系統會通知ActivityMonitor一個事件。如果目標Activity啟動,那麼ActivityMonitor的計數器則會更新。

一般使用ActivityMonitor應當執行以下步驟:

1.通過getInstrumentation()方法獲得用於測試的Instrumentation實例。 2.通過Instrumentation的addMonitor()重載方法將Instrumentation.ActivityMonitor的實例添加到當前的instrumentation中,具體的匹配規則可由IntentFilter或者類名指定。 3.等待被監視的Activity啟動。 4.驗證監視器的數字增長。 5.移除監視器。

例如:

// Set up an ActivityMonitor
ActivityMonitor receiverActivityMonitor =
        getInstrumentation().addMonitor(ReceiverActivity.class.getName(),
        null, false);
// Validate that ReceiverActivity is started
TouchUtils.clickView(this, sendToReceiverButton);
ReceiverActivity receiverActivity = (ReceiverActivity) 
        receiverActivityMonitor.waitForActivityWithTimeout(TIMEOUT_IN_MS);
assertNotNull("ReceiverActivity is null", receiverActivity);
assertEquals("Monitor for ReceiverActivity has not been called",
        1, receiverActivityMonitor.getHits());
assertEquals("Activity is of wrong type",
        ReceiverActivity.class, receiverActivity.getClass());
// Remove the ActivityMonitor
getInstrumentation().removeMonitor(receiverActivityMonitor);

使用Instrumentation發送鍵盤事件

如果Activity含有EditText,可能需要測試用戶是否可以對其輸入數據。

一般來說,要發送字符串到EditText,應當:

1.在runOnMainSync()方法中運行requestFocus()同步方法,這樣會使UI線程一直等待接收焦點。 2.調用waitForIdleSync()方法使主線程變為空閒狀態。 3.通過sendStringSync()方法發送一條字符串給EditText。

例如:

// Send string input value
getInstrumentation().runOnMainSync(new Runnable() {
    @Override
    public void run() {
        senderMessageEditText.requestFocus();
    }
});
getInstrumentation().waitForIdleSync();
getInstrumentation().sendStringSync("Hello Android!");
getInstrumentation().waitForIdleSync();
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved