`
jy503160
  • 浏览: 18659 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

android.app.instrumentation解析

 
阅读更多

转自:http://blog.csdn.net/zhaoweixing1989/article/details/8532940

已经在Android SDK中学习了很多关于JUnit的内容,但是感觉一直有几个问题没有解决(不知道大家是否有同样的感受)JUnit的测试都自动化的,完全是不需要任何 操作的,有2个问题我一直都还没有找到答案,这2个问题如下:

  1. JUnit可以用来测试Android的基本组成元素:Activity、Service、Provider,那么我们如何控制这些基本元素运行 的,这需要Android系统提供一些底层操作的接口才可以做到。
  2. 如何模拟界面操作,比如说:单击界面上的按钮、选择菜单等。

对于第二个问题,我在Cview中似乎找到了答案,Cview中提供一些界面操作的函数,例如:performClick(),看来Android SDK还是提供了一些这方面的函数来模拟各种操作。对于第一个问题,本篇对这个问题幅详细说明下。

首先我们先想下,如果要实现对Activity的测试需要些什么?首先需要创建Activity(这个Android SDK中已经提供了),然后可以控制Activity的生命周期,这些是最基本的。在Android SDK中说明过Activity的创建是异步的,也就是说当我们调用startActivty()后,这个函数立刻返回,而不是等待Activity创建 好后才返回,这就需要一些同步方面的操作。将前面的概括起来就是2个方面:控制Activity的生命周期与同步方面的问题。Android SDK为我们提供了 instrument,在android.test包中InstrumentationTestCase 类有个函数getInstrumentation()以及通过adb shell am instrument启动测试例子的方法中,都提到了instrument,下面就对instrumentation详细说明。

什么是Instrumentation?

Instrumentation是执行application instrumentation代码的基类。当应用程序运行的时候instrumentation处于开启,Instrumentation将在任何应用 程序运行前初始化,可以通过它监测系统与应用程序之间的交互。Instrumentation implementation通过的AndroidManifest.xml中的<instrumentation>标签进行描述。

Instrumentation似乎有些类似与window中的“钩子(Hook)函数”,在系统与应用程序之间安装了个“窃、听、器”。

android.app包中Instrumentation类结构,如下图所示

instrumentation

其包含有2个内部类:ActivityMoniter、ActivityResult

  • ActivityMoniter:有关特定的Intent的监视。一个ActivityMoniter类的实例通过函数 addMonitor(Instrumentation.ActivityMonitor)添加到当前instrumentation中,一旦添加后,每 当启动一个新的Activity,ActivityMoniter就会检测,如果匹配,其hit count计数更新等其他操作。 一个ActivityMonitor也可以用来寻找一个Activity,通过waitForActivity()方 法,这个函数将返直到匹配的活动被创建。
  • ActivityResult:一个活动执行的结果说明,返回到原来的活动。

然后我们看下Instrumentation类的函数,列举其主要函数如下:

  • 添加、删除ActivityMoniter;moniter
  • Application、Activity的创建与生命周期的控制;Activity
  • 控制Instrumentation的运行;start
  • 发送按键、滚动球等事件消息到当前窗口;send
  • 同步方面的操作;

sync

  1. 创建一个Activity直到Activity开始运行;
  2. 在主线程中执行一个调用,主线程被阻滞直到调用结束 ;
  3. 当主线程空闲的时候(没有消息等待处理)执行一个调用;
  4. 同步等待主线程处于空闲期

看了这些,我们在结合前面说的2个方面:制Activity的生命周期与同步方面的问题,在Instrumentation类中都实现了,尤其是些 同步操作方面的。

Instrumentation简单使用的例子

public class HelloTest extends InstrumentationTestCase

{

Hello mActivityTested;

public HelloTest() {}

//@Override

protected void setUp() throws Exception

{

super.setUp();

Intent intent = new Intent();

intent.setClassName(”com.xmobileapp.hello”, Hello.class.getName());

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

mActivityTested = (Hello) getInstrumentation().startActivitySync(intent);

}

//@Override

protected void tearDown() throws Exception

{

mActivityTested.finish();

super.tearDown();

}

}

在这里我们使用InstrumentationTestCase类的getInstrumentation()函数获取 Instrumentation对象,通过Instrumentation的startActivitySync()函数启动一个Activity,直到 Avtivity启动后返回。

AndroidManifest.xml中的<instrumentation>标签说明

打开AndroidManifest.xml文件后,将会看到AndroidManifest.xml编辑工具,通过这个工具我们可以很方面的在 AndroidManifest.xml添加元素

Android-instrumentation

选择Instrumentation面板后,我们就可以编辑Instrumentation标签了,界面如何操作在这里就不说明了,主要说明属性值 的意义:i

总结说明

学习完了Instrumentation,心中的很多问题都没有了,还需要到Android SDK中去深入的学习这个类,才能更好的测试Activity对象。

分享到:
评论

相关推荐

    Iocomp.Instrumentation.WF40

    Iocomp.Instrumentation.WF40.Common.dll,Iocomp.Instrumentation.WF40.Pro Iocomp.WF40.OPC

    android-support-multidex-instrumentation.jar.zip

    android-support-multidex-instrumentation.jar.zip

    brave-jar.zip

    brave-instrumentation-httpclient-5.12.7.jar brave-instrumentation-jms-5.12.7.jar brave-instrumentation-kafka-clients-5.12.7.jar brave-instrumentation-kafka-streams-5.12.7.jar brave-instrumentation-...

    System.Management.Instrumentation.rar

    System.Management.Instrumentation.dll

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    Learning.Android.Application.Testing.1784395331

    Focus on Android instrumentation testing to ensure full application coverage Apply testing techniques and utilize tools to improve Android application development Build intensively tested and bug free...

    源码

    《AndroidStudio单元测试——instrumentation》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38060361

    android连接SQLite数据库源代码

    2.android内部insert添加数据的方法,而且values这个不给值也必须要执行,而主键是不是null的其他字段的值是为null 3.insert update query delete 五、单元测试类要注意的 AndroidCRUDService curdService = ...

    如何对Android系统手机进行单元测试

    如何对Android系统手机进行单元测试如何进行Android单元测试Menifest.xml中加入:中加入:外面加入:MISSIONandroid:name="android.permission.RUN_INSTRUMENTATION"/&gt;android:label="Testformyapp"/编写单元测试...

    Fundamentals of Instrumentation and Measurement .pdf

    Product Description This title presents the general principles of instrumentation processes. It explains the theoretical analysis of physical phenomena used by standard sensors and transducers to ...

    Android中Hook Instrumentation 的实现

    参考博客 【Android中Hook Instrumentation 的实现】 http://blog.csdn.net/u012341052/article/details/71191409

    android-support-multidex-instrumentation.jar

    android-support-multidex-instrumentation.jar android-support-multidex-instrumentation.jar

    android 学习笔记

    电话拨号 使用系统自带意图对象完成: Intent intent=new Intent();... &lt;instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.xiaoqiang" /&gt; &lt;/manifest&gt;

    android-junit-report-dev

    instrumentation android:name="com.zutubi.android.junitreport.JUnitReportTestRunner" 4、 在sonar-project.properties文件最后中加上如下语句: sonar.junit.reportPaths=. 5、 将编译生成的应用apk和tests的...

    instrumentation-msapp.yaml

    instrumentation-msapp.yaml

    Java Instrumentation笔记

    Java Instrumentation笔记 Java SE 6新特性:Instrumentation,利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之...

    TMS.zip_INSTRUMENTATION_TMS_instrument vcl_knob

    TMS Instrumentation Workshop is a library full of components, methods and routines enabling you to create professional looking instrumentation and multimedia applications. A set containing over 80 ...

    Development.apk(Android Dev Tools)

    Android 键盘/Android 系统/API Domes/Certificate Installer(证书安装)/com.android.gestuer.builder()/com.android.sdksetup()/Custom Locale()/Dev Tools(开发工具)/Example Wallpapers(墙纸式样)/HTML查看器/...

    Devcomponents.DotNetBar.9.3破解版

    Devcomponents.DotNetBar.9.3的破解版,内含: DevComponents.DotNetBar2.dll DevComponents.DotNetBar....DevComponents.Instrumentation.Design.dll DevComponents.Instrumentation.dll DevComponents.TreeGX.dll

    DevComponents.DotNetBar2 V10 破解版

    DevComponents.Instrumentation.Design.dll DevComponents.Instrumentation.dll DevComponents.TreeGX.dll DevComponents DotNetBar2 DotNetBar VS2010 winfrom 控件 v10 破解 Dll文件,VS直接引用工具箱创建 选项卡...

Global site tag (gtag.js) - Google Analytics