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 codestartActivity(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,那么它符合测试的基本需求,输入相关参数,获取期望结果,验证。

谢谢。

更多相关文章

  1. tcping测试服务器TCP端口
  2. android实现耳机插入和拔出状态检测
  3. Android(安卓)handler使用方法
  4. Android中startActivity的使用----请求码与结果码的意义
  5. 2019-01-28 Android(安卓)自定义view
  6. Android中SecureRandom类的安全性浅析
  7. Parcelable序列化
  8. android之ListView和BaseAdapter的组合使用
  9. android中SQLite的操作

随机推荐

  1. mysql索引使用技巧及注意事项
  2. 老生常谈MYSQL模式匹配 REGEXP和like的用
  3. 浅谈mysql的索引设计原则以及常见索引的
  4. MySQL5绿色版windows下安装总结(推荐)
  5. MySQL中Decimal类型和Float Double的区别
  6. explain分析sql效率的方法
  7. 重置MySQL中表中自增列的初始值的实现方
  8. mysql下mysqladmin日常管理命令总结(必看
  9. Mysql慢查询操作梳理总结
  10. MySQL修改root密码的多种方法(推荐)