Android官方開發文件Training系列課程中文版:Activity測試之建立功能性測試
原文地址: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();
相關文章
- Android官方開發文件Training系列課程中文版:Activity測試之測試環境配置AndroidAI
- Android官方開發文件Training系列課程中文版:Android的安全建議AndroidAI
- Android官方開發文件Training系列課程中文版:分享檔案之配置檔案共享AndroidAI
- Android單元測試-對Activity的測試Android
- 測試開發之系統篇-按需建立測試虛擬機器虛擬機
- 測試開發之效能篇-JMeter介面測試JMeter
- 測試 之Java單元測試、Android單元測試JavaAndroid
- 測試開發之效能篇-效能測試設計
- 軟體開發專案文件系列之九如何撰寫測試方案
- 軟體的功能性測試
- 【效能測試】移動測試md知識總結第1篇:移動端測試課程介紹【附程式碼文件】
- XtraBackup官方文件讀書筆記和測試筆記
- 系統測試-從研發到測試過程
- 開發測試
- 軟體測試文件寫作——測試方案
- 功能測試轉向自動化測試 / 開發。10年 心路歷程——願測試人不再迷茫
- 測試測試測試測試測試測試
- 軟體測試之資料庫測試技術系列七資料庫
- [android]android自動化測試十四之dumpsys效能測試Android
- 功能測試怎麼提升測試開發能力?
- 小白測試系列:介面測試與效能測試的區別
- 測試開發之單元測試-禪道結合ZTF驅動單元測試執行
- [原創]測試漫談之讓開發人員執行測試
- 大資料測試技術——課堂測試大資料
- 開發必備之單元測試
- 軟體測試技術基礎學習之測試過程
- [測試開發]慶祝ITEye改版+測試開發專欄開通
- 測試平臺之介面測試
- 微服務測試之效能測試微服務
- 效能測試之測試指標指標
- [android]android自動化測試十之單元測試例項Android
- 自動化測試系列(三)|UI測試UI
- 微服務測試之介面測試和契約測試微服務
- 測試開發之自動化篇-自動化測試框架設計框架
- Laravel 測試驅動開發 -- 正向單元測試Laravel
- 面向開發的測試技術(二):效能測試
- [android]android自動化測試二之命令列建立AVDAndroid命令列
- 【軟體測試】軟體及其開發過程