Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html
功能性測試包括模擬用戶操作之類的組件驗證。例如開發(fā)者可以通過功能性測試來驗證在用戶執(zhí)行了UI操作之后Activity是否啟動了Activity。
如要為Activity創(chuàng)建功能性測試,測試類應(yīng)當(dāng)繼承ActivityInstrumentationTestCase2。與ActivityUnitTestCase不同,ActivityInstrumentationTestCase2既可以與Android系統(tǒng)通信,又能使程序可以接收鍵盤輸入事件與屏幕點擊事件。
驗證功能行為
一般功能性測試可能會有以下測試目的:
- 驗證在某個UI控制器被按下后,目標(biāo)Activity是否被啟動。
- 驗證目標(biāo)Activity是否將在啟動之前的用戶輸入數(shù)據(jù)正確顯示。
開發(fā)者所實現(xiàn)的代碼可能如下:
@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則會收到一個命中。開發(fā)者可以通過斷言方法來驗證ReceiverActivity是否被啟動,命中數(shù)是否會如所期望的那樣有所增長。
設(shè)置ActivityMonitor
如果需要監(jiān)視Activity,可以注冊ActivityMonitor。當(dāng)目標(biāo)Activity啟動時,系統(tǒng)會通知ActivityMonitor一個事件。如果目標(biāo)Activity啟動,那么ActivityMonitor的計數(shù)器則會更新。
一般使用ActivityMonitor應(yīng)當(dāng)執(zhí)行以下步驟:
- 1.通過getInstrumentation()方法獲得用于測試的Instrumentation實例。
- 2.通過Instrumentation的addMonitor()重載方法將Instrumentation.ActivityMonitor的實例添加到當(dāng)前的instrumentation中,具體的匹配規(guī)則可由IntentFilter或者類名指定。
- 3.等待被監(jiān)視的Activity啟動。
- 4.驗證監(jiān)視器的數(shù)字增長。
- 5.移除監(jiān)視器。
例如:
// 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發(fā)送鍵盤事件
如果Activity含有EditText,可能需要測試用戶是否可以對其輸入數(shù)據(jù)。
一般來說,要發(fā)送字符串到EditText,應(yīng)當(dāng):
- 1.在runOnMainSync()方法中運行requestFocus()同步方法,這樣會使UI線程一直等待接收焦點。
- 2.調(diào)用waitForIdleSync()方法使主線程變?yōu)榭臻e狀態(tài)。
- 3.通過sendStringSync()方法發(fā)送一條字符串給EditText。
例如:
// Send string input value getInstrumentation().runOnMainSync(new Runnable() {@Overridepublic void run() {senderMessageEditText.requestFocus();} }); getInstrumentation().waitForIdleSync(); getInstrumentation().sendStringSync("Hello Android!"); getInstrumentation().waitForIdleSync();總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类算法当中的K-means算法如何去做
- 下一篇: android sina oauth2.