Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
2016-11-14 11:42
281 查看
原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html
功能性测试包括模拟用户操作之类的组件验证。例如开发者可以通过功能性测试来验证在用户执行了UI操作之后Activity是否启动了Activity。
如要为Activity创建功能性测试,测试类应当继承ActivityInstrumentationTestCase2。与ActivityUnitTestCase不同,ActivityInstrumentationTestCase2既可以与Android系统通信,又能使程序可以接收键盘输入事件与屏幕点击事件。
验证在某个UI控制器被按下后,目标Activity是否被启动。
验证目标Activity是否将在启动之前的用户输入数据正确显示。
开发者所实现的代码可能如下:
测试框架会等待ReceiverActivity启动,否则的话将会在超时后返回null。如果ReceiverActivity启动,那么ActivityMonitor则会收到一个命中。开发者可以通过断言方法来验证ReceiverActivity是否被启动,命中数是否会如所期望的那样有所增长。
一般使用ActivityMonitor应当执行以下步骤:
1.通过getInstrumentation()方法获得用于测试的Instrumentation实例。
2.通过Instrumentation的addMonitor()重载方法将Instrumentation.ActivityMonitor的实例添加到当前的instrumentation中,具体的匹配规则可由IntentFilter或者类名指定。
3.等待被监视的Activity启动。
4.验证监视器的数字增长。
5.移除监视器。
例如:
一般来说,要发送字符串到EditText,应当:
1.在runOnMainSync()方法中运行requestFocus()同步方法,这样会使UI线程一直等待接收焦点。
2.调用waitForIdleSync()方法使主线程变为空闲状态。
3.通过sendStringSync()方法发送一条字符串给EditText。
例如:
功能性测试包括模拟用户操作之类的组件验证。例如开发者可以通过功能性测试来验证在用户执行了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测试之创建运行测试
- Android官方开发文档Training系列课程中文版:Activity测试之创建单元测试
- Android官方开发文档Training系列课程中文版:Activity测试之测试环境配置
- Android官方开发文档Training系列课程中文版:Activity测试之UI组件测试
- Android官方开发文档Training系列课程中文版:通知用户之创建不同导航方式的Activity
- Android官方开发文档Training系列课程中文版:线程执行操作之创建多线程管理器
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity
- Android官方开发文档Training系列课程中文版:与其它APP交互之允许其它APP启动你的Activity
- Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建
- Android官方开发文档Training系列课程中文版:连接无线设备之通过WIFI创建P2P连接
- Android官方开发文档Training系列课程中文版:动画视图之场景创建
- Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
- Android官方开发文档Training系列课程中文版:创建自定义View之View的绘制
- Android官方开发文档Training系列课程中文版:后台服务之IntentService的创建
- Android官方开发文档Training系列课程中文版:构建第一款安卓应用之启动另一个Activity
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity
- Android官方开发文档Training系列课程中文版:构建第一款安卓应用之工程创建
- Android官方开发文档Training系列课程中文版:创建自定义View之View的交互