`
jy503160
  • 浏览: 20011 次
  • 性别: 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对象。

分享到:
评论

相关推荐

    Android学习笔记之AndroidManifest.xml文件解析

    &lt;application android:label="@string/app_name"&gt; &lt;activity android:name=".HelloActivity"&gt; &lt;action android:name="android.intent.action.MAIN"/&gt; &lt;category android:name="android.intent.category....

    Android AndroidManifest 清单文件所有权限详解.doc

    本文将深入解析`AndroidManifest.xml`文件中的各种权限,以便开发者更好地理解和管理应用的安全性。 首先,`AndroidManifest.xml`文件的作用主要有以下几个方面: 1. **应用程序包命名**:它定义了应用的Java包名...

    app-debug-androidTest.zip

    《深入解析Android应用调试与测试:以"app-debug-androidTest.zip"为例》 在移动应用开发领域,Android应用的调试和测试是确保产品质量的关键环节。本文将以"app-debug-androidTest.zip"为例,深入探讨Android应用...

    2021032804_android 便签app.rar

    本文将深入探讨一个基于Android平台的便签应用程序的开发过程,结合"2021032804_android 便签app"这一项目源码,解析其核心技术和实现细节。 首先,我们要了解Android应用的基本架构。一个标准的Android应用通常由...

    给App开发人员讲点Android底层知识.pptx

    在Android开发中,深入理解底层知识对于提升应用性能和优化用户体验至关...总的来说,深入理解Binder、AIDL、PMS以及App启动过程,对于Android开发者来说,不仅能提高代码质量,还能更好地解决性能问题,优化用户体验。

    基于Android Studio实现的新闻APP.7z

    - 使用Android Studio的Instrumentation测试框架进行UI测试,检查用户交互行为。 8. **性能优化** - 使用Android Profiler工具分析应用性能,优化内存占用、CPU使用率和渲染速度。 - 考虑使用Paging库实现分页...

    course-automated-testing-for-android-app-源码.rar

    《Android应用自动化测试课程源码解析》 在移动应用开发领域,测试是保证产品质量的关键环节。尤其是对于Android应用,由于其平台碎片化严重,不同设备、操作系统版本间的兼容性问题尤为突出,因此自动化测试显得尤...

    简单谈谈android studio 的单元测试

    对于Model层的测试,比如网络数据的拉取和解析,我们通常不需要依赖于Android的UI或者系统服务。在这种情况下,可以直接在`test`目录下编写单元测试,使用JUnit4的`@Test`注解标记测试方法,同时可以借助Mockito等库...

    Android中使用am命令实现在命令行启动程序详解

    `am`是Android Management的缩写,它允许我们执行各种操作,如启动活动(Activity)、发送广播(Broadcast)、启动Instrumentation测试等。本文将详细解析如何使用`am`命令在命令行启动程序,并给出具体的使用实例。...

    sample-testing-android-app:旨在学习android测试的android应用程序

    《Android测试应用实战:sample-testing-android-app深度解析》 在Android开发领域,测试是保障代码质量、提升软件稳定性的重要环节。本文将深入探讨一个名为"sample-testing-android-app"的项目,它是一个专为学习...

    adb1.0.26包含fastboot.exe

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。 基本用法 命令语法 ...

    Android APP启动方式、启动流程及启动优化分析

    在Android开发中,理解APP的启动方式、启动流程以及如何进行启动优化对于提升用户体验至关重要。以下是对这些知识点的详细解析: 1. **Android APP启动方式**: - **冷启动**:当用户首次打开应用程序或者应用程序...

    android framework 经验总结

    Intent分为显式和隐式两种,前者指定接收者,后者依赖于系统解析。 5. **Broadcast Receiver**: BroadcastReceiver用于接收系统或应用广播事件,比如网络状态改变、电池电量低等。它可以动态注册或在...

    雾山的Robotium学习笔记---使用junitreport导出测试报告

    android:label="Tests for Your App" /&gt; ``` 4. **设置报告参数**:在你的测试类或`TestRunner`类中,配置`junitreport`的参数,如报告的输出路径、格式等。例如: ```java @Override protected void setUp() ...

    安卓天气预报APP的设计与开发

    12. **Unit Testing & Instrumentation Testing**:通过JUnit和Espresso等工具进行应用的测试,确保代码的质量和功能的正确性。 13. **Release Process**:完成开发后,需要对应用进行签名,优化APK大小,然后发布...

    大话企业级Android

    - **Android App Bundle**:介绍新的发布格式,减少应用大小,提高分发效率。 通过阅读《大话企业级Android》,开发者不仅可以掌握Android开发的基本技能,还能了解到企业级项目中常见的实践策略和技术,为成为一...

Global site tag (gtag.js) - Google Analytics