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