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及它们之间 ...
随机推荐
- 1.Apache Axis配置文件WSDD详解
转自:https://jyao.iteye.com/blog/1285516 1. Aapche Axis的Web Service Deployment Descriptor(WSDD)文件参考文档. ...
- POJ 1167 The Buses 暴搜+剪枝
思路: 先把能选的路线都预处理出来 按照能停的车的多少排个序 (剪枝1) 搜搜搜 如果当前剩的车÷当前能停车的多少+deep>=ans剪掉 (剪枝2) //By SiriusRen #inclu ...
- Flutter入门
1.安装SDK 官网下载其最新可用的安装包并解压. 设置环境变量:在.bash_profile文件中写入export PATH=/Users/malk/Documents/flutter/bin:$P ...
- MySQL Server 5.5.44免安装版配置详解
转载地址:http://wenku.baidu.com/view/2a8bfe6a25c52cc58bd6beff.html### 一 下载MySQL http://dev.mysql.com/dow ...
- Vue官方文档中的camelCased (驼峰式) 命名与 kebab-case
因为html特性中 元素的 prop是不区分大小写的 所以不管html中怎么大写小写变化,下面的组件的prop应该写成小写 Vue中有这样一种设定: props中如果使用为kebab-case命名方式 ...
- "getElementsByClassName is not a function" 报错原因
element.getElementsByClassName(""): 返回的含有该类的子元素数组,除了子元素以外的后代元素是获取不到的.要遍历使用,或者.element.getE ...
- 参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码
第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...
- Reference Counting GC (Part two :Partial Mark & Sweep)
目录 部分标记清除算法 前提 dec_ref_cnt()函数 new_obj()函数 scan_hatch_queue()函数 paint_gray()函数 scan_gray()函数 collect ...
- 今日SGU 5.19
SGU 142 题意:给你一个长度为n的串(由a,b组成),让你找出一个串不是n的子串,长度最下 收获:思维题,思路在代码里 #include<bits/stdc++.h> #define ...
- ORACLE-016:ora-01720 授权选项对于'xxxx'不存在
报错的情形例如以下. A用户:视图V_A B用户:视图V_B,而且用到了V_A C用户:须要用V_B, 授权过程, A用户下: grant select on V_A to B B用户下: grant ...