Activity Test1
源代码下载(免积分) :下载
Acitivty測试的API的父类是InstrumentationTestCase。这个类可以获取Instrumentation。来操作Activity。
对于activity測试,InstrumentationTestCase提供了以下三个功能:
生命周期的控制:使用Instrumentation,您能控制activity的生命周期
Dependency injection:使用Instrumentation,你可以创建mock的系统对象。能帮助你控制測试环境
UI交互:使用Instrumentation可以发送按键或者触屏事件
InstrumentationTestCase測试Activity的基本的子类:
ActivityInstrumentationTestCase2 :这个类用于一个或者多个activity的功能測试
ActivityUnitTestCase:用于測试隔离的单个activity
SingleLaunchActivityTestCase:这个类用于測试单个activity。比較少用。
其它和Activity相关的类
Mock 相关的类,ViewAsserts等。
- ActivityInstrumentationTestCase2类的測试activity的功能
功能:在SendActivity中定义Button用于启动ReceiveActivity。并把EditText中的数据传递给ReceiveActivity
注意:假设使用的是真机时,首先要把锁屏解开。其次要把键盘调成英文输入。不然的话死的非常慘的,^_^
1. 继承ActivityInstrumentationTestCase2
public class SendeActivityFunTest extends
ActivityInstrumentationTestCase2<SendActivity>
2.添加构造方法,这是junit要求的。
/*为了測试的应用可以正确的实例化,必须设置这个构造函数
* test runner(InstrumentationTestRunner或者其子类)会调用构造函数去实例化測试类。
*/
public SendeActivityFunTest() {
/*android可以利用SendActivity.class和AndroidManifest.xml
*中的instrumentation标签中的android:targetPackage属性可以获取要測试的类。
*/
super(SendActivity.class);
// TODO Auto-generated constructor stub
}
3. 添加setUp方法
//setUp()方法在其它測试方法之前调用,主要是用于初始化变量和清楚曾经的測试。
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
//保存系统对象的引用
mSendActivity = getActivity();
sendButton = (Button) mSendActivity.findViewById(R.id.sendButton);
mEditText = (EditText) mSendActivity.findViewById(R.id.editText);
}
4. 加入測试是否正确初始化的方法
//验证初始化是否正确
public void testPreconditions()
{
assertNotNull(mSendActivity);
assertNotNull(sendButton);
assertNotNull(mEditText);
}
5. 測试是否可以正确的启动ReceiveActivity。并获取正确的数据
//測试是否可以引导ReceiveActivity。并传递的数据正确
public void testSendMessageToReceiverActivity()
{
//创建ActivityMonitor去监听系统和ReceiverActivity的通信
Instrumentation.ActivityMonitor activityMonitor = getInstrumentation()
.addMonitor(ReceiveActivity.class.getName(), null, false);
/*在UI线程的測试要注意:
* 创建一个Runnable的匿名内部类,并作为參数传递给runOnUiThread()
*
*/
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//请求获取焦点
mEditText.requestFocus();
}
});
//等待直到MainHandler中的事件都有被运行完
getInstrumentation().waitForIdleSync();
//发送字符串到EditText中
getInstrumentation().sendStringSync(message);
getInstrumentation().waitForIdleSync();
/*TouchUtils:有非常多触摸事件,这些方法可以用在InstrumentationTestCase
*和ActivityInstrumentationTestCase2上去模拟用户触摸屏幕。
*/
TouchUtils.clickView(this, sendButton);
//Block until an Activity is created that matches this monitor
ReceiveActivity receiveActivity = (ReceiveActivity) activityMonitor
.waitForActivityWithTimeout(TIME_OUT);
assertNotNull("ReceiverActivity is null", receiveActivity);
assertEquals("monitor for ReceiverActivity has not been called",
1,activityMonitor.getHits());
final TextView receivedMessage = (TextView) receiveActivity
.findViewById(R.id.textView);
assertNotNull(receivedMessage);
assertEquals("wrong received message ", message,
receivedMessage.getText().toString());
//移除activityMonitor
getInstrumentation().removeMonitor(activityMonitor);
}
使用ActivityInstrumentationTestCase2通常的測试步骤是:
- 初始化的測试(此时setup方法中的变量)
- UI測试
- activity的状态管理的測试(主要用于測试生命周期)
參考的资料:
http://developer.android.com/training/activity-testing/index.html
http://developer.android.com/tools/testing/activity_testing.html
http://developer.android.com/tools/testing/activity_test.html
Activity Test1的更多相关文章
- Android之activity初讲
前天我们已经成功创建了第一个Android项目,如果我要把软件推荐给我的第一个用户,毫无疑问是从界面开始介绍.因为即使你的程序算法再高效,架构再出色,用户根本不会在乎这些,他们一开始只会对看到的东西感 ...
- Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值
原文:[置顶] Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值 前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候 ...
- 首先运行application的name相应的类或做activity中间name相应的类?
今天找到该程序条目中找到以下两个条件name我写了一个测试程序,一般如以下: 看mainfest.xml <application android:allowBackup="true& ...
- Android开发之Activity(cho1)篇
一.Activity判断网络是否连通: 首先创建一个Andorid Project项目,然后添加一个on1类,Layout一个button控件和Textview控件. values有一个Color.x ...
- Android之Activity
Activity总结: Activity的顶层View是DecorView,而我们在onCreate函数中通过setContentView设置的View只不过是这个DecorView的一部分罢了.De ...
- activity 工作流学习(一)
一.了解工作流 1.工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实 ...
- EventBus实现activity跟fragment交互数据
最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...
- Android—Service与Activity的交互
service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...
- Android:Activity+Fragment及它们之间的数据交换.
Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...
随机推荐
- 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控--转
原文地址:http://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247483789&idx=1&sn=ae11f04780 ...
- useradd
功能说明:useradd命令可用于创建新的用户或者更改用户的信息. 语法格式:useradd [选项] [用户名]useradd -D [选项] 选项说明:1.使用useradd常规添加用户工作原理流 ...
- Linux常用音乐播放器
1.Rhythmbox是一个音乐播放和管理应用,GNOME桌面环境自带,它可以播放各种音频格式的音乐管理收藏的音乐.同时还具有音乐回放.音乐导入.刻录音频CD.显示专辑封面.显示歌词.DAAP共享等功 ...
- 学习《人工智能一种现代的方法(第3版)》中文PDF+英文PDF
学习人工智能概论时,推荐看看<人工智能:一种现代的方法(第3版)>,最权威.最经典的人工智能教材,已被全世界100多个国家的1200多所大学用作教材. 全面性以及结构的安排还是不错的,值得 ...
- AJAX 删除数据
var json = { "id":"12", "name":"admin"}$.ajax({ type: " ...
- 03014_properties配置文件
1.使用properties配置文件 (1)开发中获得连接的4个参数(驱动.URL.用户名.密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可: (2)通常情况下 ...
- CCF模拟题 相反数
相反数 时间限制: 1.0s 内存限制: 256.0MB 问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数). 输入格式 第一行包含一个 ...
- 出乎意料的else语句
在python中你可能时不时不碰到else语句用在while和for循环中,请不要吃惊,先看看它的作用吧! 实际上在循环语句中,else子句仅仅会在循环完毕后运行.即跳出循环的操作.如break,同一 ...
- RvmTranslator6.4 is released
RvmTranslator6.4 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...
- 目标决定人生——没有目标就失去一切 (没有目标的奋斗是浪费青春,比如交了钱却不去参加考试、让时间白白溜走。根据目标与定位来选择最合适的企业。人生要算总账)good
没有目标就失去一切 刚毕业那会儿,幼稚得可笑,老跟同学打电话,明面上聊聊近况,暗地里比较.你要比我工资多一百块,心里特不平衡,凭什么呀,在学校那会儿公认的我比你强.你要带个头衔,而我啥也不是,普通员工 ...