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() {@Overridepublic void run() {senderMessageEditText.requestFocus();} }); getInstrumentation().waitForIdleSync(); getInstrumentation().sendStringSync("Hello Android!"); getInstrumentation().waitForIdleSync();總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类算法当中的K-means算法如何去做
- 下一篇: Android官方开发文档Trainin