源代码下载(免积分) 下载

Acitivty測试的API的父类是InstrumentationTestCase。这个类可以获取Instrumentation。来操作Activity。

对于activity測试,InstrumentationTestCase提供了以下三个功能:

  1. 生命周期的控制:使用Instrumentation,您能控制activity的生命周期

  2. Dependency injection:使用Instrumentation,你可以创建mock的系统对象。能帮助你控制測试环境

  3. UI交互:使用Instrumentation可以发送按键或者触屏事件

InstrumentationTestCase測试Activity的基本的子类:

  1. ActivityInstrumentationTestCase2 :这个类用于一个或者多个activity的功能測试

  2. ActivityUnitTestCase:用于測试隔离的单个activity

  3. 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通常的測试步骤是:

  1. 初始化的測试(此时setup方法中的变量)
  2. UI測试
  3. 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的更多相关文章

  1. Android之activity初讲

    前天我们已经成功创建了第一个Android项目,如果我要把软件推荐给我的第一个用户,毫无疑问是从界面开始介绍.因为即使你的程序算法再高效,架构再出色,用户根本不会在乎这些,他们一开始只会对看到的东西感 ...

  2. Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值

    原文:[置顶] Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值 前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候 ...

  3. 首先运行application的name相应的类或做activity中间name相应的类?

    今天找到该程序条目中找到以下两个条件name我写了一个测试程序,一般如以下: 看mainfest.xml <application android:allowBackup="true& ...

  4. Android开发之Activity(cho1)篇

    一.Activity判断网络是否连通: 首先创建一个Andorid Project项目,然后添加一个on1类,Layout一个button控件和Textview控件. values有一个Color.x ...

  5. Android之Activity

    Activity总结: Activity的顶层View是DecorView,而我们在onCreate函数中通过setContentView设置的View只不过是这个DecorView的一部分罢了.De ...

  6. activity 工作流学习(一)

    一.了解工作流 1.工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实 ...

  7. EventBus实现activity跟fragment交互数据

    最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...

  8. Android—Service与Activity的交互

    service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...

  9. Android:Activity+Fragment及它们之间的数据交换.

    Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...

随机推荐

  1. android中文网站

    Google Developers中国网站发布 用户评价:  / 55 差好  最后更新于 2016年12月09日 点击数:15209   我们很高兴地宣布,Google Developers 中国网 ...

  2. babel的插件

    比如想编译es6的箭头函数,需要使用babel-plugin-transform-es2015-arrow-functions这个插件 此外babel提供了 prests(预设) 相当于是插件的集合 ...

  3. 昼猫笔记--什么是DOM

    昼猫笔记--给你带来不一样的笔记 不止是笔记 更多的是思考 Hello,大家好,昼猫,今天来加深下DOM 什么DOM呢?它的全称叫 Document Object Model 通过全称可以知道它是 文 ...

  4. 详解如何在vue项目中引入饿了么elementUI组件

    在开发的过程之中,我们也经常会使用到很多组件库:vue 常用ui组件库:https://blog.csdn.net/qq_36538012/article/details/82146649 今天具体说 ...

  5. IDEA 热启动,每次更改代码后不用重启服务

    1.ctrl+Shift+Alt+/,选择Registry 2.勾选 compiler.automake.allow.when.app.running(可能不按首字母排序,可以多找找) 3.Setti ...

  6. 【Henu ACM Round#17 B】USB Flash Drives

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序,逆序.贪心选较大的就好. [代码] #include <bits/stdc++.h> #define ll lon ...

  7. 保留原先小程序名称 更改微信小程序主体

    首先给小程序开发者普及一些官方消息: 1.目前官方是不允许修改已经认证的小程序主体信息!(公众号可以修改) 2.小程序与公众号的名称是全平台唯一,即如果小程序叫‘ABC’其他小程序和公众号就不能存在‘ ...

  8. 洛谷 P1913 L国的战斗之伞兵

    P1913 L国的战斗之伞兵 题目背景 L国即将与I国发动战争!! 题目描述 为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区… ...

  9. 【Android实战】Bitmap图片的截屏、模糊处理、传递、使用

    项目中遇到了这样一个需求: 当某个条件满足时就截取当前屏幕.并跳转到另外一个页面,同一时候将这个截屏图片作为下一个页面的背景图片,同一时候背景图片须要模糊处理 接下来就一步一步解决这个问题: 1.截取 ...

  10. [转]C语言预处理命令详解

    转载:https://www.cnblogs.com/clover-toeic/p/3851102.html 一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的 ...