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测试之创建功能性测试相关推荐
- Android官方开发文档Training系列课程中文版:目录
原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...
- Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...
- Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制
原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...
- Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar
导言- 添加ActionBar 原文地址:http://android.xsoftlab.net/training/basics/actionbar/index.html ActionBar是很多重要 ...
- Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南
入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程.(导航栏请参见官方 ...
- Android官方开发文档Training系列课程中文版:Activity测试之测试环境配置
原文地址:http://android.xsoftlab.net/training/activity-testing/index.html 引言 开发者应当将测试作为应用开发周期的一部分.良好的测试用 ...
- Android官方开发文档Training系列课程中文版:OpenGL绘图之环境配置
原文地址:http://android.xsoftlab.net/training/graphics/opengl/index.html 引言 Android framework层为创建绚丽的功能性U ...
- Android官方开发文档Training系列课程中文版:分享文件之分享一个文件
原文地址:http://android.xsoftlab.net/training/secure-file-sharing/share-file.html 一旦APP设置通过URI的方式共享文件,你需 ...
最新文章
- php model类,PHP培训之PHP Model类
- SpringMVC:学习笔记(4)——处理模型数据
- 云信小课堂|搭建应用级别在线聊天室,7步就够了!
- imagenet数据格式以及python文件处理的一些函数
- qt在visual studio 2015下的使用
- 程序员去交友网站找女友,没想到找到了这个...
- java 等待唤醒机制,Java线程等待唤醒机制
- 微软一站式示例代码库(中文版)2011-05-13版本, 新添加Windows Azure, WinForms等16个Sample...
- 如何停止Linux系统中占用CPU 100%的进程
- 开源与安全兼备 IBM LinuxONE轻松掌控关键业务
- python开发环境
- 面向对象编程——2.细致了解
- java ffmpeg_jave (java的ffmpeg框架)简单使用
- ffmpeg 的下载安装
- sata电源定义 联想小4pin_SATA硬盘15针供电接口的引脚定义
- 成立1年的水母智能,AI智能设计生意做得如何?
- python3集合_python3集合练习(set)
- HBuilder:实现箭头向上悬浮
- 【DW推荐系统论文组队task1--NCF】
- 热风枪焊接表面贴装元件的工具和技巧
热门文章
- 每个大数据工程师都应该知道的OLAP 核心知识点
- C语言、嵌入式重点知识:回调函数
- 看完少年的你,想到少年的我
- linux 内核宏container_of剖析
- MDK中利用宏定义__DATE__和__TIME__设置产品的代码固件版本
- linux下解包bin二进制文件_linux下如何使用docker二进制文件安装_docker离线安装
- 计算机linux运维日记,计算机的运维系统情况
- PHP MYSQL关键词统计系统_PHP MySQL Order By 关键词
- JS面向对象——Object.defineProperty
- Java 运算符、表达式、语句