已经在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类结构,如下图所示
其包含有2个内部类:ActivityMoniter、ActivityResult
ActivityMoniter:有关特定的Intent的监视。一个ActivityMoniter类的实例通过函数addMonitor(Instrumentation.ActivityMonitor)添加到当前instrumentation中,一旦添加后,每当启动一个新的Activity,ActivityMoniter就会检测,如果匹配,其hit count计数更新等其他操作。 一个ActivityMonitor也可以用来寻找一个Activity,通过waitForActivity()方法,这个函数将返直到匹配的活动被创建。
ActivityResult:一个活动执行的结果说明,返回到原来的活动。
然后我们看下Instrumentation类的函数,列举其主要函数如下:
添加、删除ActivityMoniter
Application、Activity的创建与生命周期的控制
控制Instrumentation的运行
发送按键、滚动球等事件消息到当前窗口
同步方面的操作
1.创建一个Activity直到Activity开始运行;
2.在主线程中执行一个调用,主线程被阻滞直到调用结束 ;
3.当主线程空闲的时候(没有消息等待处理)执行一个调用;
4.同步等待主线程处于空闲期
分享到:
相关推荐
4. **Bytecode Analysis**: 为了有效地修改字节码,Ja-Netfilter可能使用了如ASM、BCEL或Javassist等字节码库来解析和生成字节码。 5. **Network Packet Filtering**: 这个框架可能提供了一套API,允许开发者定义...
#### 三、详细章节解析 - **第1章:测量仪器简介** - **1.1 一般介绍和定义**:此节首先介绍了测量、仪器仪表和计量学的基本概念。测量是指确定被测对象量值的过程;仪器仪表则是用于进行测量的设备;而计量学则是...
### 《真实世界的仪器控制与Python》核心知识点解析 #### 一、书籍概述 《真实世界的仪器控制与Python》(Real World Instrumentation with Python) 是由J. M. Hughes撰写的一本专业书籍,首次出版于2010年11月。...
在加载过程中,classloader会经历加载、验证、准备、解析、初始化、使用和卸载七个阶段。classloader工作机制的核心之处在于它的动态性和模块化,这使得Java程序在运行时可以加载类,这一点与传统的C/C++程序编译后...
**OpenTelemetry-Java-Instrumentation 源码解析** OpenTelemetry 是一个开放源代码项目,用于收集、处理和导出应用性能监控数据。它提供了标准的 API、SDK 和工具,使得开发者能够轻松地在各种语言环境中实现...
然而,它也可能带来一定的性能开销,因为需要额外解析和修改字节码。此外,不当的 RASP 实现可能会引入新的安全漏洞或与应用程序的其他部分产生冲突。 8. **学习资源** 要深入了解 Java Instrumentation 和 Java...
本文将深入解析这个库的背景、功能以及其在实际应用中的价值。 OpenTelemetry是一个开放源代码项目,旨在为分布式系统提供统一的可观测性框架。它支持收集和导出应用程序的性能数据,如度量、日志和跟踪,以便进行...
"java agent使用全解析" java agent是java命令的一个参数,可以用于指定一个jar包,并且对该java包有两个要求:1.这个jar包的MANIFEST.MF文件必须指定Premain-Class项;2. Premain-Class指定的那个类必须实现...
【Android常用组件深入解析1】 在Android开发中,Activity是四大组件之一,它承载着用户界面和交互的核心功能。深入理解Activity的启动流程对于优化应用性能、解决内存泄漏等问题至关重要。本文将对Activity的启动...
在Spring的jar包解析中,我们可以深入了解Spring框架的组成部分及其功能。 1. **spring.jar** - 这是Spring的主jar包,包含了所有模块的基本功能,但不包括特定于某些技术的库,如mock、aspects、portlet和...
以下将详细解析这一主题涉及的关键知识点。 ### 高级Cisco IOS设备仪表化 #### 1. **嵌入式事件管理器(Embedded Event Manager,EEM)与Tcl脚本** - EEM是Cisco IOS中的一项强大功能,允许网络管理员定义事件和...
解析器将此应用程序解析为 AST 对于每个作用域中的每个表达式和语句,程序将插入一个检测语句来捕获变量的值。 一旦应用程序被检测,它将使用构建脚本进行编译和运行 检测和编译后,程序将通过启动 JVM 以不同的输入...
#### 标签解析:“python 文字版 书签版 超清版” - **Python**:指出本书主要使用的编程语言是Python。 - **文字版**:表示本书提供的是可复制文本的版本,而非图片格式。 - **书签版**:意味着书中包含了书签和...
`<instrumentation>` 标签** - **属性**: - `android:name`:测试代码的类名。 - `android:targetPackage`:指定要测试的应用包名。 #### 六、其他重要标签 **1. `<uses-feature>` 标签** - **用途**:声明...
《深入理解AndroidManifest.xml解析》 在Android应用开发中,AndroidManifest.xml文件扮演着至关重要的角色。它是每个Android程序的核心配置文件,位于应用程序的根目录下,用于定义应用程序的全局特性,包括应用...
`spring-context.jar` 扩展了 Spring 核心功能,包含 ApplicationContext、JNDI、instrumentation 和验证相关类,依赖 `spring-beans` 和 `spring-aop`。 `spring-dao.jar` 提供数据访问和事务处理,依赖 `spring-...
4. **模块化**: Spring框架包括许多模块,如Core Container、Data Access/Integration、Web、AOP、Instrumentation等,每个模块都提供特定的功能,可以根据需要选择使用。 #### 三、SpringMVC框架解析 SpringMVC...
13. winmgmt:提供系统管理和WMI(Windows Management Instrumentation)服务。 除了这些基本的系统进程外,还有一些可选的服务,如inetinfo、tlntsvr、tftpd等,它们提供了特定的功能,如Web服务、远程桌面服务和...
Android Activity的启动过程源码解析 Android Activity是Android系统中一个非常重要的概念,堪称四大组件之首。Activity的启动过程是一个复杂的过程,涉及到多个类和方法的调用。本文将从源码的角度对Activity的...
- **功能**:为Windows Management Instrumentation (WMI) 提供支持,用于管理系统中的硬件和软件资源。 - **是否为系统进程**:是 #### 3. **其他重要系统进程** 除了上述列举的关键系统进程之外,还有一些其他...