Android程序测试(2)——Activity测试

简介: 与Content Provider测试、Service测试相比,Activity测试尤其离不开Android的测试框架(instrumentation framework),这是因为Android中的activities有着复杂的生命周期,而这些生命周期的各个阶段都是基于回调方法的,而这些方法只能由Android的测试框架来直接调用,也就是说,在一个程序中,向UI发送事件的唯一方法就是通过Android的测试框架。

Content Provider测试、Service测试相比,Activity测试尤其离不开Android的测试框架(instrumentation framework),这是因为Android中的activities有着复杂的生命周期,而这些生命周期的各个阶段都是基于回调方法的,而这些方法只能由Android的测试框架来直接调用,也就是说,在一个程序中,向UI发送事件的唯一方法就是通过Android的测试框架。

本文将根据官方文档,来介绍一下怎样进行activities测试。


在开始之前,有必要介绍一下与activity测试相关的类:

InstrumentationTestCase,该类是我们进行activities测试的基类,主要就是用来为我们进行activities测试使用的测试用例(test case)的子类提供测试instrumentation,具体对于activity测试,这个基类主要提供了如下的功能:

Activity的生命周期控制:通过InstrumentationTestCase提供的instrumentation,我们可以使用测试用例类来对要测试的activity进行startpausedestroy

依赖注入(dependency injection):Instrumentation允许我们创建和使用诸如ContextApplication等的mock system objects来运行要测试的activity。这样做的最大好处就是可以控制测试环境,并且让要测试的activityproduct环境相隔离。另外我们还可以自己写intent,并通过这些intent来启动activity

UI交互:通过instrumentation,我们可以直接向要测试的activityUI发送按键和触屏事件。

通过继承TestCaseAssertactivity测试类也提供了JUnit测试框架。其中两个主要的测试子类是:ActivityInstrumentationTestCase2ActivityUnitTestCase

ActivityInstrumentationTestCase2是被设计用来对一个程序中的一个activity或者多个activities进行功能性的测试。而被测试的activity通过使用标准的系统Context运行在独立的测试程序实例中,并且我们可以向这写activity来发送模拟的intent,但我们并不能模拟Context或者activity所在的Applications

ActivityUnitTestCase这个类主要用来在一个隔绝的环境中来测试一个单独的activity。在启动这个activity之前,我们可以注入一个模拟的Context或者Application,但我们不能向这个被测试的activity发送模拟的intents

MockApplication主要用来帮助控制测试环境,只有在使用ActivityUnitTestCase这个测试用例类的时候才可使用。

ViewAsserts,主要用来定义断言(assertion


下面是进行activity测试的具体过程:

首先,根据SDK安装目录中的Spinner范例,新建一个android工程SpinnerActivity,作为被测试的工程。然后新建一个用于测试SpinnerActivity的测试工程,取名为SpinnerActivityTest,包名为SpinnerActivity的包名加上“.test”,测试的target选择SpinnerActivity,关于如何创建一个工程的测试工程可以参看:

http://blog.csdn.net/yaolingrui/article/details/7360101

还有一种创建测试工程的方法就是:在创建被测试工程的时候同时创建测试工程,这是推荐的创建过程,这一部分可以参看官方文档中的相关部分,官方文档为:

http://developer.android.com/resources/tutorials/testing/activity_test.html 

新建好测试工程之后,测试工程中将搭建起了测试的基本框架,在测试工程的AndroidManifest.xml文件中,将为我们自动添加上相关的测试信息,包括指定被测试的程序,和使用android.test.runner类库等。

在创建好测试工程之后,然后,就是在测试工程中创建test cast类,具体就是先创建一个test case的类文件,然后在这个类文件中添加test case类构造方法、set up方法,添加初始条件测试、UI测试和状态管理测试:

创建类文件:名为SpinnerActivityTest ,继承自android.test.ActivityInstrumentationTestCase2<SpinnerActivity> 

添加构造方法:指定要测试程序的包名和main activityclass,这主要是用来指定要测试的applicationactivity

添加testUp()方法:该方法在每次测试之前都会被调用,主要用来初始化测试环境,包括初始变量等,关于这方面,还可以添加testDown()方法,该方法将在每次测试结束之后调用。注意要调用setActivityInitialTouchMode(false) 方法,该方法是用来关闭模拟器或是及设备的touch mode,如果不关闭的话,当测试工程的测试方法向程序发送key事件的话,这些调用将会被忽略。

添加初始条件测试:testPreConditions(),主要用来确保要被测试的程序被正确的初始化。

添加UI测试:用来向要被测试的UI,发送key事件。

添加状态管理测试

再然后就是运行这个测试工程,查看测试结果。注意选择Run as>Android JUnit Test,这里只是一个简单的流程介绍,具体内容可参看官方文档:

http://developer.android.com/resources/tutorials/testing/activity_test.html 

相关文章
|
7天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
51 6
|
8天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
16 3
|
8天前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
11 3
|
26天前
|
安全 Linux 网络安全
Kali渗透测试:远程控制程序基础
Kali渗透测试:远程控制程序基础
18 0
Kali渗透测试:远程控制程序基础
|
8天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
9 0
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
43 4
|
26天前
|
安全 Java Linux
Kali渗透测试:通过Web应用程序实现远程控制
Kali渗透测试:通过Web应用程序实现远程控制
38 0
|
2月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
44 0
|
17天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
29 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
191 7
Jmeter实现WebSocket协议的接口测试方法