您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > android单元测试框架
Android单元测试框架张志红2016-1-182快速上手指南Java基础知识知道如何使用Eclipse(调试工具、模拟器)Android系统基础知识熟悉Android单元测试框架环境需求JDKEclipse(安装ADT插件)AndroidSDKPS百度:在Windows下搭建Android开发环境3目录初始Android系统Junit与Android框架InstrumentationTestCase类项目实践4Android系统1、完全使用Java语言编写;2、运行在AndroidDalvik虚拟机之上;3、它通过JavaJNI接口调用本地库的接口。5Android系统—四大组件Activity:每个屏幕就是一个活动;通过意图(Intent)对象激活;•完整生命周期:onCreate()到onDestroy()•可见生命周期:onStart()到onStop()•前景生命周期:onResume()到onPause()6Android系统—四大组件Service:在后台运行,用于处理长时间任务而影响前台用户体验的组件;一个活动,可以启动后台服务,也可以绑定到一个后台服务;通过意图(Intent)对象激活;•Astartedservice•Aboundservice7Android系统—四大组件BroadcastReceive广播接收组件:广播接收组件是用来响应系统层面的广播通知的组件;通过意图(Intent)对象激活;生命周期:为从回调onReceive()方法开始到该方法返回结果后结束,大概10秒左右;ContentProvider内容提供组件:用来管理应用的可共享部分的数据。应用可以将数据存储在文件系统、SQLite数据库、网络或任何一个应用可以访问的永久存储设备。8目录初始Android系统Junit与Android框架InstrumentationTestCase类项目实践9Junit与Android框架junit测试类库和android中单元测试类库:Android测试环境的主要特征:•可以访问Android系统对象。•Instrumentation框架可以控制和测试应用程序。•运行单个test或testsuite的工具,带或不带Instrumentation。•支持以Eclipse的ADT插件和命令行方式管理Test和Test工程。在这些包中最为重要的是:junit.framework、android.test,其中前者是JUnit的核心包,后者是AndoidSDK在Junit.framework的基础上扩展出来的包(未实现参数化)。SDK功能说明junit.frameworkJUnit测试框架junit.runner实用工具类支持JUnit测试框架android.testAndroid对JUnit测试框架的扩展包android.test.mockAndroid的一些辅助类10Junit与Android框架junit.framework:11android.test包:12AndroidTestCase类AndroidTestCase类继承自JUnit的TestCase,不能使用Instrumentation框架。但这些类包含访问系统对象(如Context,最主要的功能是加载和访问资源)的方法。使用Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase。子类有:ApplicationTestCase——测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序。ProviderTestCase2——测试单个ContentProvider的类。因为它要求使用MockContentResolver,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的。ServiceTestCase——测试单个Service的类。你可以注入一个模拟的Context或模拟的Application(或者两者),或者让Android为你提供Context和MockApplication。13InstrumentationTestCase类InstrumentationTestCase类继承自JUnitTestCase类,并可以使用Instrumentation框架,用于测试Activity。使用Instrumentation,Android可以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Activity生命周期的状态。基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件给UI。子类有:ActivityTestCase——Activity测试类的基类。SingleLaunchActivityTestCase——测试单个Activity的类。它能触发一次setup()和tearDown(),而不是每个方法调用时都触发。如果你的测试方法都是针对同一个Activity的话,那就使用它吧。SyncBaseInstrumentation——测试ContentProvider同步性的类。它使用Instrumentation在启动测试同步性之前取消已经存在的同步对象。ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。不同于其它的Instrumentation类,这个测试类不能注入模拟的Intent。ActivityInstrumentationTestCase2——在正常的系统环境中测试单个Activity的类。你不能注入一个模拟的Context,但你可以注入一个模拟的Intent。另外,你还可以在UI线程(应用程序的主线程)运行测试方法,并且可以给应用程序UI发送按键及触摸事件。14目录初始Android系统Junit与Android框架InstrumentationTestCase类项目实践15InstrumentationTestCase类Android测试环境的核心是一个Instrumentation框架:•运行ActivityManager,使用Instrumentation框架启动和控制TestRunner;•TestRunner反过来又使用Instrumentation来关闭任何主程序的实例;•启动测试程序及主程序,在同一个进程中;确保测试程序与主程序间的直接交互;16InstrumentationTestCase类publicclassInstrumentationTestCaseextendsTestCaseknownDirectSubclassesActivityTestCase,ProviderTestCaseTextendsContentProvider,SingleLaunchActivityTestCaseTextendsActivity,SyncBaseInstrumentationknownIndirectSubclassesActivityInstrumentationTestCaseTexendsActivity,ActivityInstrumentationTestCase2TextendsActivity,ActivityUnitTestCaseTextendsActivityAndroidDevelopers网址类PublicMethodsInstrumentationgetInstrumentation()得到当前case的instrumentation对象voidinjectInstrumentation(Instrumentationinstrumentation)将instrumentation对象注入到当前case中.该方法会在setup方法中被调用finalTextendsActivityTlaunchActivity(Stringpkg,ClassTactivityCls,Bundleextras)启动activityfinalTextendsActivityTlaunchActivityWithIntent(Stringpkg,ClassTactivityCls,Intentintent)启动一个带有特殊intent的activityvoidrunTestOnUiThread(Runnabler)在UiThread线程中启动casevoidsendKeys(StringkeysSequence)发送键盘事件,从字符串里提取事件的标识,每个事件以空格拼接voidsendKeys(int...keys)发送一系列的keycode值,代表一系列的键盘事件voidsendRepeatedKeys(int...keys)参数的形式为点击的次数n,键盘事件keycode.例如(2,KEYCODE_MENU)按2次菜单键18InstrumentationTestCase类核心Code:启动待测应用并打开待测的activity1.设置用户名文本框具体输入焦点;2.因为这段代码需要操作界面的控件,因此需要运行在待测应用的线程中,而不是测试用例的线程中;3.只需要将要在UI线程上执行的代码作为参数传入runOnUiThread函数里就可以了,代码块是放在Runnable匿名对象的run()函数里输入手机号码18867101277输入密码hong12319InstrumentationTestCase子类--ActivityTestCasepublicabstractclassActivityTestCaseextendsInstrumentationTestCaseProtectedMethodsActivitygetActivity()获得Activity的值voidscrubClass(Class?testCaseClass)在tearDown方法执行时,调用一系列的TestCase接口,为了擦除一些类变量voidsetActivity(ActivitytestActivity)设置Activity值20InstrumentationTestCase子类--ActivityUnitTestCasepublicabstractclassActivityUnitTestCaseextendsActivityTestCase通常用来测试单独Activity,用于Activity的单元测试。在启动被测试的Activity之前,你可以Inject一个假的Context或是Application,使用这个Mock的Context中一个隔离环境中运行被测试的Activity。在setUp中,创建了一个MockIntent对象mStartIntent用于测试Activity21InstrumentationTestCase子类--ActivityUnitTestCasePublicMethodsTgetActivity()intgetFinishedActivityRequest()得到finishActivity(int)中传入的参数值。如果返回-1代表没完成intgetRequestedOrientation()得到setRequestedOrientation(int)中传入的值。IntentgetStartedActivityIntent()得到startActivity(Intent)orstartActivityForResult(I
本文标题:android单元测试框架
链接地址:https://www.777doc.com/doc-2897225 .html