测试与指令(Instrumentions)
Android包含了一组丰富的测试工具,它针对Android环境扩展了行业标准的JUnit测试框架。你仍可以使用JUnit测试你的Android应用,但是Android工具却允许你写出更加精密复杂的测试你的应用的每个方面,不论是单元测试还是框架层次的测试。
Android的测试环境包含以下关键功能:
Android对JUnit框架的扩展,通过了访问Android系统对象的功能。
指令框架可以使测试代码控制并检查应用
模拟常用的Android系统对象。
提供了运行当个测试或一组测试的工具,可以使用指令也可以不使用
支持通过命令行或Eclipse的ADT插件管理测试用例及测试工程。
本文概述了Android测试环境以及它的使用方法。本文假设你了解Android应用编程及JUnit测试方法的基础知识。
概述
Andorid测试环境的核心是指令框架,使用它在测试时你可以精确地控制程序。使用指令,你可以在主程序启动前建立模拟的系统对象如Context,可以控制程序的生命周期,可以像应用发送UI时间,可以在应用运行时检查它的状态。指令框架通过使主应用和测试应用运行于同一个进程来实现这些功能。
在测试应用的manifest文件中定义<instrumentation>元素,可以使测试应用在测试时连接到主应用。这个元素的属性指定了主应用的package名字,并告诉Android如何运行测试应用。关于指令的更加详细的描述请参考Instrumentation Test Runner。
下图简要描述了Android测试环境
在Android中,测试应用是Android应用本身,因此,编写测试应用的方式与被测应用的一样。SDK工具帮你创建主程序的工程的同时也创建它的测试工程。你可以通过Eclipse的ADT插件或者命令行来运行Android测试,也可以使用adb工具或者内置的Ant target运行测试。
如何在Eclipse中设置并运行测试,请参考Testing in Eclipse, with ADT, 如果是其他IDE,请参考Testing in Other IDEs。
如果希望一份手把手的Android测试介绍,请尝试一下的测试例程:
Hello,Testing例程以Hello, world应用为例介绍了基本的测试概念和程序。
Activity Testing例程比Hello, Testing例程更加深入。它指导你在一个更加真实的应用中开发一个更加复杂的测试场景。
测试API
为了使用JAVA编写测试级测试应用,Android提供了一套扩展自部分JUnit测试框架的测试API。除此之外,Android提供了强大的指令框架,它允许开发人员的测试代码访问应用的状态以及运行时对象。
以下章节描述了Android中可用的测试API的主要部件。
JUnit测试用例类
测试API中的一些类扩展了JUnit的TestCase类,但是没有使用指令框架。这些类包括测试中访问系统对象的方法,比如程序的上下文Context。使用Context,开发人员可以查看资源,文件,数据库等等。基类是AndroidTestCase,通常使用一个与特定部件关联的子类。
这些子类是:
ApplicationTestCase:用于测试整个应用。它可以注入一个模拟Context到应用中,在程序启动前设置初始的测试参数,以及在应用结束后销毁前检查相关数据。
ProviderTestCase2:用于独立地测试单个的ContentProvider。因为限制使用模拟的MockContentResovlver,并且注入一个独立的IsolatedContext,使得这个provider测试独立于操作系统的其余部分。
ServiceTestCase:用于独立地测试单个的Service。开发人员可以使用它注入一个模拟的Context或者更模拟的应用(或者两者都注入),或者要求Andorid提供一个完全的Context和一个MockApplication。
指令测试用例类
这些测试activities的API扩展了JUnit TestCase类,并使用了指令框架。使用指令, Android可以向测试中的应用程序发送时间进行自动化的界面测试,可以精确地控制activity的启动,以及在activity的整个生命周期中监测它的状态。
基类是InstrumentationTestCase。它的所有子类都可以向测试应用发送键盘敲击时间和屏幕触摸事件,也可以注入一个模拟的Intent。
这些子类是:
ActivityTestCase:activity测试用例的基类。
SingleLaunchActivityTestCase:用于测试单个的activity。它仅调用一次setUp()和tearDown,而非每次方法调用就调用一次。在同一个activity上测试所有的方法时可以使用这个类。
SyncBaseInstrumentation:用于测试content provider的同步操作。它可以使用指令在开始被测同步操作前取消或禁止已经存在的同步操作。
ActivityUnitTestCase:用于独立测试单个的activity。使用它,可以注入一个模拟的上下文或应用或者两者都模拟。
与其它指令类不同,这个测试类不会注入一个模拟的Intent。
ActivityInstrumentationTestCase2:这个类用于在正常的系统环境下测试单个的activity。你不能注入模拟的Context,但可以注入模拟的Intent。同样的,你可以在UI线程(被测程序的主线程)中运行测试方法,这允许你向应用界面发送按键与触摸事件。
断言类
Android同样也扩展了JUnit的Assert类,这是测试代码中assert()的基础。这个类有两个扩展MoreAsserts和ViewAsserts:
MoreAsserts包含了更加强大的断言,例如支持正则表达式匹配的assertContainsRegex(String,String)。
ViewAsserts包含了用于Android Views的断言,例如只可以检测在屏幕的某个位置是否存在某个View控件的assertHasScreenCoordinates(View,View,int,int)。这些断言简化了UI的形状位置和排列的测试。
Mock对象类
Android提供了创建模拟的系统对象,例如应用程序、上下文、content resovlers和resources。Android也提供了一些创建模拟Intent的测试类。这些对象使依赖关系注入更加容易,因为使用它们比创建真实的对象简单。这些类定义在android.test和android.test.mock中。
IsolatedContext:模拟了一个上下文,应用程序使用它可以独立运行。同时,它还有足够的桩代码来处理与上下文通信的OS代码。这个类用于单元测试。
RenamingDelegatingContext:当一个已经存在的普通上下文改变它的默认文件和数据库名时,将大多数上下文的功能委托这个上下文。这样可以使用一个普通的系统上下文和测试名称测试文件和数据库操作。
MockApplication,MockConentResolver,MockContent,MockDialogInterface,MockPageManager,MockResource:测试中使用的创建模拟系统对象的类。它们仅仅暴露那些用于管理对象的接口。这些方法的默认实现是简单的抛出一个异常。当测试应用调用这些方法时,你应该扩展这些类并覆写这些方法。
指令测试执行器
Android提供了一个定制类用于运行带有指令调用的测试,叫做InstrumentationTestRunner。这个类控制测试中的程序,在同一个进程中运行测试程序以及主程序,并将测试输出发送到适当位置。InstrumentationTestRunner在运行时控制整个测试环境的关键是指令的使用。注意,即使在你的测试类中没有使用指令,也会使用这个测试执行器。
当你运行一个测试程序时,你首先运行系统组件Activity管理器。它使用指令框架启动和执行测试执行器,测试执行器反过来使用指令关闭所有运行的主程序的实例,启动测试程序,然后在同一进程中启动启动主程序。这允许测试程序从不同的角度与主程序交互。
如果你使用Eclipse开发,ADT插件可以帮助你设置InstrumentationTestRunner或其它测试执行器。插件会提示你指定使用哪个测试执行器和被测试应用的package名称,插件会自动添加一个<instrumentataion>元素到测试程序的manifest文件,并填充适当的属性。Eclipse的ADT插件会自动在使用指令的Activity管理器的控制下启动测试应用,并将测试输出重定向到Eclipse的JUnit视图窗口中。
如果你使用命令行,你可以使用Ant和android工具帮助你设置你的测试工程。可以使用adb工具访问Activity管理器运行带指令的测试,并将输出定向到标准输出上。
使用测试环境
测试程序包含了对一个Android应用的测试代码,它本身也是一个Android应用。测试应用存放于一个独立的Android工程中,它和标准的Android应用一样拥有文件和目录。测试程序通过它的manifest文件链接到被测应用。
每个测试应用包含一个或多个测试用例类,它们派生于特定类型组件的Android类。这些测试用例类包含了一些方法,它们定义了对被测应用的某部分的测试。当你运行测试应用,Android会启动测试应用,加载被测试应用到同一个进程中,然后调用这个测试用例类中的每个方法。
测试所需的工具和流程取决于你使用的开发环境。如果你使用Eclipse,ADT插件会提供工作帮助你开发和运行测试。请参考主题Testing in Eclipse, with ADT。 如果使用其它开发环境,你需要使用命令行工具,请参考Testing in Other IDEs 。
使用测试工程
要开始测试一个Android应用,你要使用Android工具为它建立一个测试工程。工具会建立工程文件夹和需要的文件和子目录。工具也会建立一个连接到被测试程序的manifest文件。使用Eclipse ADT插件建立测试工程的步骤在Testing in Eclipse, with ADT 中有描述,使用其它开发工具的步骤描述在文档Testing in Other IDEs中。
使用测试用例类
一个测试应用包含一个或多个扩展自Android测试用例类的测试用例类。选择哪个测试用例类,取决于你要测试的Android组件的类型和要测试的内容。一个测试应用可以测试不同的组件,划每个测试用例被设计成只能测试单个类型的组件。Android测试用例类的描述在章节The Testing API 中。
未完待续……
分享到:
相关推荐
本文将深入探讨“Android-Gps-Test.rar”这个压缩包所涉及的GPS纬度、Android GPS测试以及如何利用Androits GPS测试应用来评估GPS性能。 首先,我们要理解GPS纬度的概念。在地理坐标系统中,纬度是指一个地点距离...
《深入解析Android Gps Test源码》 在移动开发领域,Android GPS测试是开发者不可或缺的工具,它能够帮助我们理解并优化GPS定位功能。本文将深入探讨名为"Android Gps Test"的应用源码,旨在揭示其工作原理,帮助...
"android test" 指的是在Android平台上进行的各种软件测试活动。在这个智慧停车场的项目中,开发者可能使用了多种测试方法来验证应用的功能和用户体验。 首先,让我们关注"图示档"。在Android应用中,图示档通常指...
**PyPI 官网下载 | lava-android-test-0.7.tar.gz** PyPI(Python Package Index)是Python软件包的官方仓库,它为开发者提供了一个平台来发布他们的Python库,并让其他用户能够方便地下载和安装。在本案例中,我们...
Android Gps Test源码.zip项目安卓应用源码下载Android Gps Test源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
"0android_test[1]"这个标题可能是指一个Android测试项目,它的目标是验证Android Studio开发环境是否能顺利运行并执行测试任务。下面我们将深入探讨Android测试的基础知识、Android Studio的测试工具以及"Hello...
本项目"AndroidTest"专注于演示Android平台上的单元测试实践,主要涉及了两种常见的单元测试框架:AndroidJUnit4和Mockito。 首先,我们来了解一下`AndroidJUnit4`。这是Android Studio内置的测试库,基于Java的...
【标题】"Android测试项目"(android_test_project) 在这个名为"android_test_project"的项目中,我们...通过学习和应用这些测试项目,开发者可以更深入地理解Android测试的重要性,并提升其在开发过程中的测试意识。
在Android开发中,JUnitTest是进行单元测试的重要工具,它基于Java的JUnit框架,使得开发者能够在Android环境中对代码进行验证和测试。本文将详细介绍如何在Android项目中设置和使用JUnitTest用例,以及如何通过...
这是一个简易的小工具,用来测试android手机中的各种sensor是否好用,查看参数
USB Test and Measurement Device (IVI)驱动,用于各种测试设备,适用于各种上位机不识别设备的问题,找了很久网上都没有,试过几台电脑后发现有一台可以就把驱动备份下来了,再下载到其他电脑可以使用
在Android开发领域,TestApp是一个典型的实战项目名称,它涵盖了Android应用从设计到实现的各个环节。这个项目可能是为了教授开发者如何构建一个完整的Android应用程序,强调实践操作和测试的重要性。在这个项目中,...
- GPSTEST源代码的学习可以帮助开发者深入理解Android的Location API和GPS硬件交互机制。 - NMEA协议的理解是解析GPS数据的关键,学习源代码中的NMEA报文处理代码有助于掌握这一协议。 总之,GPSTEST android gps...
这个“Android wifi test”项目就是一个这样的实用工具,它支持TCP和UDP通信,并且具备记录通信数据到文件的功能,这对于调试和分析网络性能是极其有用的。 首先,我们要理解TCP(Transmission Control Protocol)...
通过对"Android Gps Test源码"的深入学习,开发者不仅能掌握Android GPS应用的基本开发技能,还能了解到如何优化定位性能、提升用户体验。这对于从事地图导航、轨迹记录、户外运动等领域的开发者来说尤其有价值。...
在压缩包文件“mikeandroid-gpstest-8b860f9”中,可能包含了Android GPS TEST项目的源代码或资源文件,这为深入研究和学习提供了宝贵素材。开发者可以查看源码,理解如何与GPS API交互,如何处理位置数据,以及如何...
Test Android .java
appium-uiautomator2-server-debug-androidTest.apkappium-uiautomator2-server-debug-androidTest.apk
Android GPS测试应用源码是针对计算机科学与技术专业学生,特别是那些致力于Android开发的毕业生所设计的学习资源。它为学生们提供了一个实践平台,帮助他们深入理解Android系统中GPS模块的工作原理以及如何在应用...
android cts test user manual