編寫:huanglizhuo - 原文:http://developer.android.com/training/activity-testing/activity-functional-testing.html
功能測試包括驗(yàn)證單個(gè)應(yīng)用中的各個(gè)組件是否與使用者期望的那樣(與其它組件)協(xié)同工作。比如,我們可以創(chuàng)建一個(gè)功能測試驗(yàn)證在用戶執(zhí)行UI交互時(shí)Activity是否正確啟動(dòng)目標(biāo)Activity。
要為Activity創(chuàng)建功能測,我們的測試類應(yīng)該對(duì)ActivityInstrumentationTestCase2進(jìn)行擴(kuò)展。與ActivityUnitTestCase不同,ActivityInstrumentationTestCase2中的測試可以與Android系統(tǒng)通信,發(fā)送鍵盤輸入及點(diǎn)擊事件到UI中。
要了解一個(gè)完整的測試?yán)涌梢詤⒖际纠龖?yīng)用中的SenderActivityTest.java
。
我們的函數(shù)測試目標(biāo)應(yīng)該包括:
我們可以這樣實(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
...
}
測試會(huì)等待匹配的Activity啟動(dòng),如果超時(shí)則會(huì)返回null。如果ReceiverActivity啟動(dòng)了,那么先前配置的ActivityMoniter就會(huì)收到一次碰撞(Hit)。我們可以使用斷言方法驗(yàn)證ReceiverActivity是否的確啟動(dòng)了,以及ActivityMoniter記錄的碰撞次數(shù)是否按照預(yù)想地那樣增加。
為了在應(yīng)用中監(jiān)視單個(gè)Activity我們可以注冊一個(gè)ActivityMoniter。每當(dāng)一個(gè)符合要求的Activity啟動(dòng)時(shí),系統(tǒng)會(huì)通知ActivityMoniter,進(jìn)而更新碰撞數(shù)目。
通常來說要使用ActivityMoniter,我們可以這樣:
下面是一個(gè)例子:
// 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);
如果Activity有一個(gè)EditText,我們可以測試用戶是否可以給EditText對(duì)象輸入數(shù)值。
通常在ActivityInstrumentationTestCase2中給EditText對(duì)象發(fā)送串字符,我們可以這樣做:
比如:
// Send string input value
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
senderMessageEditText.requestFocus();
}
});
getInstrumentation().waitForIdleSync();
getInstrumentation().sendStringSync("Hello Android!");
getInstrumentation().waitForIdleSync();
本節(jié)例子AndroidTestingFun.zip