`
MyEyeOfJava
  • 浏览: 1125174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7af2d6ca-4fe1-3e9a-be85-3f65f7120bd0
测试开发
浏览量:70188
533896eb-dd7b-3cde-b4d3-cc1ce02c1c14
晨记
浏览量:0
社区版块
存档分类
最新评论

[Android]ActivityUnitTestCase解释

阅读更多


ActivityUnitTestCase
ActivityUnitTestCase这个单元测试抽象类,是为了单独测试Activity而存在的,所以当你选择去测试service,receive的时候就不要选择它了,把它加入知识体系中是为了扩展对固有测试思路的联系,ActivityUnitTestCase会以与系统底层关联性最小的代价创建出来,是一个专门测试Activity的单元测试父类。这种与系统的关联性在setup与teardown方法中,系统已经自动帮你做了,你需要做得就是启动这个activity去做测试。

需要注意的是,作为纯单元测试,是不应该将activity运行起来进行测试的,或者不能有数据存储和交互依赖关系,下面的方法可以在这个类中调用,但是被调用的时候会抛出相关的excepiton信息。

createPendingResult(int, Intent, int)
startActivityIfNeeded(Intent, int)
startActivityFromChild(Activity, Intent, int)
startNextMatchingActivity(Intent)
getCallingActivity()
getCallingPackage()
createPendingResult(int, Intent, int)
getTaskId()
isTaskRoot()
moveTaskToBack(boolean)


下面的方法被调用的时候再UI层面上你是看不到任何反应的,但是能够调用以下2个方法测试activity并且传递相关参数。

 getStartedActivityIntent()  //获取到当前被测试activity的intent
 getStartedActivityRequest() //获取被测activity的request code
startActivity(Intent)  //开启activity但是不在ui线程中展示
startActivityForResult(Intent, int)  //获取activity运行后的结果,调用后再activity运行结束后调用onActivityResult


使用方法举例:
 public class MyActivity extends Activity {
     ...

     static final int PICK_CONTACT_REQUEST = 0;

     protected boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
             // When the user center presses, let them pick a contact.
             startActivityForResult(
                 new Intent(Intent.ACTION_PICK,
                 new Uri("content://contacts")),
                 PICK_CONTACT_REQUEST);
            return true;
         }
         return false;
     }

     protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == PICK_CONTACT_REQUEST) {
             if (resultCode == RESULT_OK) {
                 // A contact was picked.  Here we will just display it
                 // to the user.
                 startActivity(new Intent(Intent.ACTION_VIEW, data));
             }
         }
     }
 }


下面的方法也在调用的时候不会开启activity,你可以使用 isFinishCalled() and getFinishedActivityRequest()在调取他们的时候拦截参数
finish() //activity 完成
finishFromChild(Activity) //子activity调用finish方法的时候被调用
finishActivity(int) //强制停止之前你使用 startActivityForResult方法开启的activity



例如,使用intent开启某个activity:
mHomeActivity = launchActivityWithIntent("com.ziyu.activity", HomeActivity.class, intent);



总结一下:ActivityUnitTestCase这个抽象类的作用是,开启某个activity,获取activity传递的参数,获取activity执行后的结果,能够给activity提供相关的参数进行启动,可以不运行在ui线程中,实现真正的单元测试activity,那么它符合测试的基本需求,输入相关参数,获取期望结果,验证。

谢谢。
0
0
分享到:
评论

相关推荐

    android之Junit ActivityUnitTestCase 演示

    android Junit ActivityUnitTestCase 演示 例子 ,android Junit ActivityUnitTestCase 演示 例子

    android之Junit ActivityUnitTestCase 剖析

    android之Junit ActivityUnitTestCase ActivityInstrumentationTestCase2 剖析

    Android人脸识别源码——详细代码解释

    Android人脸识别源码——详细代码解释

    Android框架揭秘.pdf

    《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...

    Android BLE蓝牙例子(包括android版Lightblue)实例源码

    源码里面有Bluetooth4_3/BLEDemo/Android_Lightblue.apk三个.前两个是BLE的demo。BLEDemo这个功能较Bluetooth4_3多一些,有兴趣的可以都看下。Android_Lightblue.apk是Android版的lightblue,在进行ble开发的时候用...

    android应用开发范例精解

    第2篇为应用开发篇,通过实例介绍了Android UI布局、Android人机界面、手机硬件设备的使用、Android本地存储系统、Android中的数据库、多线程设计、Android传感器、Android游戏开发基础、Android与Internet,以及...

    Android 7.1.1 (API 25) SDK Platform 下载

    # mv /opt/android-sdk/platforms/android-25/android-7.1.1/* /opt/android-sdk/platforms/android-25/ # rm -rf /opt/android-sdk/platforms/android-25/android-7.1.1 官网下载地址:...

    Android串口通信(Android Studio)

    Android串口通信(Android Studio) serial Port 简单的demo 好久之前整的

    Android 8.0.0 (API 26) SDK Platform

    使用: export ANDROID_HOME="/opt/android-...# mv /opt/android-sdk/platforms/android-8.0.0 /opt/android-sdk/platforms/android-26 官网下载地址:https://dl.google.com/android/repository/platform-26_r01.zip

    Android扫雷游戏(基于Android Studio)

    基于Android平台的扫雷小游戏,使用Android Studio开发,附有简单注释,适用于初步掌握Android技术的程序猿们!

    Android Studio实战 快速、高效地构建Android应用

    《Android Studio实战 快速、高效地构建Android应用 全面涵盖关于Android Studio及其庞大工具生态系统的内容,包括Git和Gradle:除了介绍Android Studio与Git(用于源代码管理)和Gradle(一款构建及测试工具)的无缝...

    Android组件设计思想

    Android应用开发的哲学是把一切都看作是组件。把应用程序组件化的好处是降低模块间的耦合性,同时提高模块的复用性。Android的组件设计思想与传统的组件设计思想最大的区别在于,前者不依赖于进程。也就是说,进程...

    JS调用Android方法,向Android方法传递json数据

    JavaScript调用Android方法,向Android方法传递json数据。

    c#开发Android应用实战

    ◆ 解释如何针对Android设备硬件编写程序 ◆ 深入分析文件系统和应用程序首选项 ◆ 讨论如何在Mono for Android、MonoTouch和WindowsPhone 7之间共享代码 ◆ 列出通过国际化和本地化支持功能来实现应用程序全球化的...

    android source 2.2(android-8)

    android-2.2 source文件 eclipse中绑定android源码的方法 1.下载android-2.2 source 2.解压放在android.jar所在目录的sources里即可(注意是sources而非source)。 比如我android.jar所在目录为 D:\android-sdk...

    WebRTC的Android实现 源码下载 包括服务器,pc端,android端

    WebRTC的Android实现:包括服务器,pc端,android端

    Android技术内幕.系统卷(扫描版)

    8.2.8 dalvik解释器 /517 8.2.9 dalvik jit /519 8.3 jni的构架与实现 /523 8.3.1 jni构架 /523 8.3.2 jni实现 /524 8.4 小结 /526 第9章 android 核心库 /527 9.1 android核心库简介 /528 9.2 android系统api /529 ...

    Android support.v7包

    Android support.v7包

    Android40个经典源码

    1 Android PDF 阅读器源码 2 Android Txt文本阅读器源码 3 Android SqliteManager 源码 4 Android 个人记账程序源码 5 android 多点触控实例源码 6 android 画图程序 7 Android 手电筒源码 8 Android 天气预报加...

Global site tag (gtag.js) - Google Analytics