android中文SDK测试基本原理_第1页
android中文SDK测试基本原理_第2页
android中文SDK测试基本原理_第3页
android中文SDK测试基本原理_第4页
android中文SDK测试基本原理_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.android中文SDK 测试根本原理测试根本原理android测试框架,作为集成开发环境的一部分,提供了一个架构和强大的工具来帮助你从单元到框架来测试应用程序各个层次的各个方面。测试框架有以下特征:l android测试套件基于JUnit。你可以很容易地使用JUnit,不需要调用Android API既可以测试一个类,或者不需要通过Android的JUnit扩展就可以测试一个一个android组件。假设你初学Android测试,你可以从通用测试用例类如AndroidTestCase开场,然后再使用更高级的类。l Android Junit扩展提供了特定组件的测试用例类。这些类提供了一些辅助

2、方法,通过这些方法可以创立模拟对象和方法,以此帮助你控制组件的生命周期。l测试套件包含在测试包里,与主要的应用程序包相类似,这样你既不需要学习一套新的工具和技术来设计和构建测试了。l Eclipse的ADT里有可用的构建和测试的SDK工具,对于其他IDE也提供了命令行工具。这些工具从要被测试的应用程序工程获取信息,通过这些信息自动生成构建文件,配置文件和测试包的构造目录。l SDK还提供了monkeyrunner,用Python语言测试设备的API。还有UI/Application Exerciser Monkey,一个对UI进展压力测试的命令行工具,可以给设备发送随机事件。文档描绘了Andr

3、oid测试框架的根本原理,包括测试的构造,用来开发测试的API,和用来运行和查看测试结果的工具。文档假定你已经具有Android应用程序和JUnit测试方法的知识。以以下图简要说明了测试框架:测试构造Android的构建和测试工具假定测试工程是以标准的测试构造、测试用例类、测试包和测试工程来组织的。Android测试基于JUnit。通常来说,一个JUnit测试就是一个方法,测试应用程序的一个部分。把测试方法组织到一个叫做测试用例或测试套件test case or test suites里。每个测试多是一个独立的测试模块。每个类是一个一系列相关联的测试的容器,尽管他经常提供一些帮助方法。在JUn

4、it里,你在一个类文件了构建一个或多个测试源代码。相类似的,在Android中,你使用SDK的构建工具来构建一个或多个测试源代码到一个Android测试包的类文件里。在JUnit中,你使用一个test runner来执行测试类。在Android中,你使用测试工具加载测试包和要测试的应用程序,然后测试工具执行一个特定的Android test runner。测试工程测试想android应用程序一样被组织成工程。一个测试工程是一个目录或者Eclipse工程,在里面你可以为测试包创立源代码,配置文件和其他文件。Android SDK包含了用于Eclipse ADT插件的工具和命令行工具,用来帮助你创

5、立和更新测试工程。这些工具为源代码、资源和配置文件创立目录。命令行工具还创立你需要的Ant构建文件。你应该使用Android工具来创立测试工程。有以下好处:l自动建立测试包,用InstrumentationTestRunner作为test case runner。你必须使用InstrumentationTestRunner和他的子类来运行JUnit测试。l为测试包创立一个适宜的名字。假设要测试的应用程序有一个名为com.mydomain.myapp包,Android工具就会将测试包名设置为com.mydomain.myapp.test。帮助你识别他们的关系,防止系统内冲突。l为测试工程自动创立

6、适宜的构建文件、配置文件和目录构造。帮助你构建测试包而不需要修改构建文件和在测试包与要测试的应用程序间设置链接。你可以在文件系统中的任何位置创立一个测试工程,但最好的方法就是在应用程序的src/目录的同一个根目录下创立一个tests/目录,以他来作为测试工程的更目录。这方便找到与应用程序关联的测试。例如,应用程序工程根目录是MyProject,那么你应该使用以下的目录构造:MyProject/AndroidManifest.xml res/.resources for main applicationsrc/.source code for main application.tests/And

7、roidManifest.xml res/.resources for testssrc/.source code for tests测试API android测试API基于JUnit API,并且通过instrumentation框架和Android特定的测试类来扩展。JUnit你可以用JUnit TestCase类来对一个简单的java对象进展单元测试。TestCase也是AndroidTestCase的基类,你可以使用AndroidTestCase测试依赖于Android的对象。除了提供JUnit框架,AndroidTestCase还提供了Android特定的setup、teardown

8、和辅助方法。你可以使用JUnit Assert类来显示测试结果。assert方法比较你测试的期望值和实际结果值,假设比较失败那么抛出异常。Android也提供了一个断言的类,扩展了比较的类型,还有另一个断言类来测试UI。这些将在Assertion calsses中介绍。想学习更多关于JUnit的知识,可以阅读主页。注意,Android测试API支持Junit3代码风格而不支持JUnit4.还有,你必须使用Android的instrumentation测试运行器InstrumentationTestRunner来运行你的测试用例类。这个测试运行器将在Running Tests部

9、分介绍。Instrumentation Android instrumentation是一系列的控制方法或Android系统里的"hooks"钩子。这些hooks独立控制地一个Android组件的生命周期。他们也控制Android如何加载应用程序。通常来说,一个Android组件运行在一个有系统决定的生命周期里。例如,一个activity对象的生命周期在他被一个Intent激活的时候开场。该对象的onCreate方法被调用,接着调用onResume。当用户启动另一个应用程序,onPause方法被调用。假设activity的代码中调用了finish方法,onDestroy方法

10、被调用。Android框架API不提供直接调用这些回调方法的途径,但是你可以通过使用instrumentation来到达直接调用回调方法这个目的。而且,系统让一个应用程序里的所有组件都运行在同一个进程中。你可以允许一些组件如contentProvider运行在一个另外的进程,但是你却不可以强迫一个应用程序运行在与一个正在运行的应用程序一样的进程里。通过Android instrumentation,你可以在测试代码中调用回调方法。这样使得你可以一步一步的运行生周期的每个阶段,就像你调试组件那样。以下代码片段演示如何使用它来测试一个activity保存和回复状态:/Start the main

11、activity of the application under test mActivity=getActivity;/Get ahandle to the Activity object's main UI widget,a Spinner mSpinner=SpinnermActivity.findViewByIdcom.android.example.spinner.R.id.Spinner01;/Set the Spinner to aknown position mActivity.setSpinnerPositionTEST_STATE_DESTROY_POSITION

12、;/Stop the activity-The onDestroymethod should save the state of the Spinner mActivity.finish;/Re-start the Activity-the onResumemethod should restore the state of the Spinner mActivity=getActivity;/Get the Spinner's current position int currentPosition=mActivity.getSpinnerPosition;/Assert that

13、the current position is the same as the starting position assertEqualsTEST_STATE_DESTROY_POSITION,currentPosition;这里用到的关键方法getActivity是instrumentation API的一部分。要测试的Activity知道你调用该方法才会启动。你可以先进展测试前的准备工作,然后调用该方法启动Activity。同时,instrumentation可以把一个测试包和将要测试的应用程序加载到一样的进程中。由于应用程序组件和他们的测试在一样的进程中,所以测试可以调用组件中的方法,

14、修改和检查组件的属性。测试用例类test case classes Android提供了几个测试用例类,这些类都是通过扩展TestCast类和Assert类的来的,具有android特定的setup、teardown和辅助方法。AndroidTestCase AndroidTestCase是一个很有用的开场Android测试的普通测试用例类。它扩展了TestCase和Assert。他提供了JUnit标准的setUp和tearDown方法,同时还有所有JUnit的Assert方法。另外,它提供了测试权限的方法,并且提供了一个通过去除特定类引用来防止内存泄漏的方法。特定组件的测试用例Android

15、测试框架的一个主要特性就是它的用于特定组件的测试用例类。这些类用于特定的组件测试需要,具有setup和teardown和组件的生命周期控制方法。他们同时提供了设置mock对象的方法。这些类在特定组件测试主题里介绍:l activity测试l ContentProvider测试l Service测试Android没有为BroadcaseReceiver提供一个单独的测试用例类。取而代之的是,通过测试给他发送Intent对象的组件,验证BroadcaseReceiver是否正确响应,以此来测试BroadcaseReceiver。ApplicationTestCase你可以用ApplicationT

16、estCase测试应用程序对象的setup和teardown。这些对象保存信息的全局状态,这些信息是应该到应用程序包里的所有组件的。这个测试用例在验证配置文件的application元素是否正确设置是非常有用。但是注意:该测试用例不允许你控制应用程序里组件的测试。InstrumentationTestCase假设你想在一个测试用例类里使用instrumentation方法,你必须使用InstrumentationTestCase或者它的子类。Activity测试用例扩展了这个基类,增加了其他在activity测试中的辅助功能。Assertion类因为Android测试用例类是基于JUnit扩展

17、的,所以你可以使用断言方法来显示测试结果。断言方法将返回的实际值与期望值比较,假设比较失败那么抛出断言异常。使用断言比使用日志更方便,并且有更好的测试性能。除了JUnit Assert类方法外,测试API还提供了MoreAsserts和ViewAsserts类:MoreAsserts包含了更为强大的断言,如assertContainRegexString,String,用来进展正那么表达式匹配。ViewAsserts包含有关Views的一些有用的断言。例如,包含了assertHasScreenCoordinatesView,View,int,int,用来测试一个View在可见的屏幕上是否具有特

18、定的X和Y坐标位置。这些断言简化了UI的几何图形和定位测试。Mock虚拟对象类为了使测试中便于进展依赖注入,Android提供了一些类来创立虚拟系统对象,如Context对象、ContentProvider对象、ContentResolver对象和Service对象等。一些测试用例还提供了虚拟Intent对象。使用这些虚拟对象一方面可以不依赖系统进展独立测试,另一方面在测试中便于依赖注入。这些类可以在java包android.test和android.test.mock中找到。虚拟对象类还便于依赖注入,通过提供一个非功能性的一般对象的子类,除了重写定义。例如,MockResources对象提供

19、了Resources的一个子类,它里边的所有方法在调用的时候都抛出异常。要使用它,你只需要重写那些必须提供信息的方法。以下这些是Android中可用的虚拟对象类:Simple mock object类MockApplication、MockContext、MockContentProvider、MockCursor、MockDialogInterface、MockPackageManager和MockResources提供了一个简单且有用的虚拟策略。他们是响应系统对象类的不完全版本,他们所有的方法被调用时都抛出UnsupportedOperationException异常。要使用它们,你就要重

20、写你需要的方法来提供虚拟依赖关系。注意:MockContentProvider和MockCursor是API level 8新增的。Resolver虚拟对象MockContentResolver通过掩盖正常的系统resolver框架来提供独立的contentProvider测试。MockContentResolver不是用提供的authority字符串在系统中寻找contentProvider,而是使用自己内部特有的表。你必须用addProviderString,ContentProvider方法明确的增加providers到这个表中。基于这个特性,你可以将一个authority与一个虚拟co

21、ntentProvider关联起来。你可以创立一个真正provider的实例但却能在里面使用测试数据。你甚至可以将一个authority对应的provider设置为null。实际上,MockContentResolver对象把你的测试从包含真是数据的provider中分隔出来。你可以控制provider的功能,并且可以阻止你的测试影响真是的数据。用于测试的Contexts Android为测试提供了两个Context类:l IsolatedContext提供一个独立的Context、文件、目录和数据库操作。虽然他的功能受到限制,但是这个Context有足够的代码片段来响应系统的调用。l这个类允

22、许你在不影响真实数据的情况下测试一个应用程序的数据操作。l RenamingDelegatingContext提供了一个Context,在这个Context当中,大部分的功能有现有的Context来处理,但是文件和数据库操作那么由IsolatedContext处理。被别离的部分使用一个测试目录和创立特定的文件和目录名。你可以自己控制命名,或者让构造器constructor自动决定。这个对象提供了一个快速的方法来建立一个独立的数据操作区域,并且为其他所有的Context操作保存了正常的功能。运行测试测试用例由测试运行器类来运行,测试运行器类加载测试用例类、初始化、运行、销毁每个测试。Androi

23、d测试运行器必须是被instrumented的,这样启动应用程序的系统工具就能控制测试包如何加载测试用例和应用程序。你在测试包的配置文件里告诉android平台用哪个instrumented了的测试运行器。InstrumentationTestRunner是主要的Android测试运行器。他扩展了JUnit的测试运行器框架而且也是instrumented的。它能运行有Android提供的任何测试用例类,并且支持所有可能的测试类型。你在测试包的配置文件里的instrumentation元素中指定InstrumentationTestRunner或者他的子类。InstrumentationTest

24、Runner代码是属于共享库android.test.runner的,而不是链接到android代码的。要包含他,你必须在uses-library元素中指定他。你不需要自己设置这些元素,Eclipse的ADT和android命令行工具会自动构建他们,把他们添加到你测试包里的配置文件中。注意:假设你使用一个不是InstrumentationTestRunner的测试运行器,你必须修改instrumentation元素,指定你想要使用的类。要运行InstrumentationTestRunner,你要使用有Android工具调用的内置的系统类。当你在Eclipse ADT里运行测试时,这些类被自动

25、调用。当你从命令行运行测试时,你用Android Debug Bridgeadb来运行这些类。系统类加载和启动测试包,完毕所有正在运行将要测试应用程序的实例进程,并加载一个新的应用程序实例。然后他们把控制权交给InstrumentationTestRunner,让他来运行测试包里的每个测试用例类。你也可以控制哪个测试用例和方法将被运行,通过Eclipse的ADT或者在命令行工具里使用标记。系统类和InstrumentationTestRunner都不运行要测试的应用程序,而是有测试用例类直接运行应用程序的。它调用应用程序里的方法,或者是调用它自己的方法来触发应用程序的生命周期事件。应用程序在测

26、试用例的完全控制之下,允许测试用例在运行测试前设置测试环境the test fixture。在前面的代码片段中已经展示了测试显示Spinner widget的activity。学习更多有关运行测试的内容,请参看在Eclipse ADT里测试和在其他IDE里测试主题。查看测试结果Android测试框架将测试结果返回给启动测试的工具。假设你在Eclipse里用ADT运行测试,结果将被显示在一个新的JUnit view面板。假设你从命令行运行测试,结果将被显示在标准输出。在这两种情况下,你能看见测试摘要,摘要显示每个测试用例的名称和运行的方法。同时可以看见所有失败的断言。并且显示发生断言失败所在的代码行。断言失败也会列出期望值与实际值。测试结果有一个格式,有你使用的IDE来指定。monkey和monkeyrunner SDK提供了两个工具来从功能层面上测试应用程序:l UI/Application Exerciser Monkey,通常称为"monkey",是一个命令行工具,向设备发送键盘输入、触摸和手势等随机事件。你可以用adb工具来运行他。用它来应用程序的压力测试并报揭露生的错误。你可以通过运行该工具来重

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论