Android提供了一系列强大的测试工具,它针对Android的环境,扩展了业内标准的JUnit测试框架。尽管你可以使用JUnit测试Android工程,但Android工具允许你为应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。

Android测试环境的主要特征有:

l可以访问Android系统对象。

lInstrumentation框架可以控制和测试应用程序。

lAndroid系统常用对象的模拟版本。

l运行单个test或test suite的工具,带或不带Instrumentation。

l支持以Eclipse的ADT插件和命令行方式管理Test和Test工程。

概要

Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。使用Instrumentation,你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。

通过在测试工程的manifest文件中添加<instrumentation>元素来指定要测试的应用程序。这个元素的特性指明了要测试的应用程序包名,以及告诉Android如何运行测试程序。在Inustrumentation TestRunner章节有更多的细节描述。

下面的图片概要的描述了Android的测试环境:

1420440os2obsiosojcqsv

在Android中,测试程序也是Android程序,因此,它和被测试程序的书写方式有很多相同的地方。SDK工具能帮助你同时创建主程序工程及它的测试工程。你可以通过Eclipse的ADT插件或者命令行来运行Android测试。Eclipse的ADT提供了大量的工具来创建测试用例,运行以及查看结果。

Testing API

Android提供了基于JUnit测试框架的测试API来书写测试用例和测试程序。另外,Android还提供了强大的Instrumentation框架,允许测试用例访问程序的状态及运行时对象。

JUnit TestCase类

继承自JUnit的TestCase,不能使用Instrumentation框架。但这些类包含访问系统对象(如Context)的方法。使用Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase,一般常见的是它的子类,和特定组件关联。

子类有:

l ApplicationTestCase——测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序。

l ProviderTestCase2——测试单个ContentProvider的类。因为它要求使用MockContentResolver,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的。

l ServiceTestCase——测试单个Service的类。你可以注入一个模拟的Context或模拟的Application(或者两者),或者让Android为你提供Context和MockApplication。

Instrumentation TestCase类

继承自JUnit TestCase类,并可以使用Instrumentation框架,用于测试Activity。使用Instrumentation,Android可以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Activity生命周期的状态。

基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件给UI。子类还可以注入一个模拟的Intent。

子类有:

l ActivityTestCase——Activity测试类的基类。

l SingleLaunchActivityTestCase——测试单个Activity的类。它能触发一次setup()和tearDown(),而不是每个方法调用时都触发。如果你的测试方法都是针对同一个Activity的话,那就使用它吧。

l SyncBaseInstrumentation——测试Content Provider同步性的类。它使用Instrumentation在启动测试同步性之前取消已经存在的同步对象。

l ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。

不同于其它的Instrumentation类,这个测试类不能注入模拟的Intent。

l ActivityInstrumentationTestCase2——在正常的系统环境中测试单个Activity的类。你不能注入一个模拟的Context,但你可以注入一个模拟的Intent。另外,你还可以在UI线程(应用程序的主线程)运行测试方法,并且可以给应用程序UI发送按键及触摸事件。

更多相关文章

  1. Android应用程序与SurfaceFlinger服务的连接过程分析
  2. Android核心分析(20)----Android应用程序框架之无边界设计意图
  3. Android应用程序消息处理机制(Looper、Handler)分析(1)
  4. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
  5. android基础知识17:Android设备常见问题与测试要领
  6. android基础知识12:android自动化测试03—基于junit的android测试
  7. Android性能测试
  8. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程
  9. 【苦读官方文档】2.Android应用程序基本原理概述

随机推荐

  1. centos下部署redis服务环境及其配置说明
  2. 用jQuery的attr()设置option默认选中无效
  3. 一台电脑(服务器)安装2个Mysql
  4. Deemon & CSRF漏洞自动挖掘工具分析
  5. 【MOS】Redundant Interconnect ora.clus
  6. Elasticsearch 最佳运维实践 - 总结(一)
  7. 踩坑CBO,解决那些坑爹的SQL优化问题
  8. Intel Thunderbolt曝出7个漏洞,影响过去9
  9. Sentence-BERT: 一种能快速计算句子相似
  10. 【MOS】Limitations of the Oracle Cost