ActivityUnitTestCase
ActivityUnitTestCase这个单元测试抽象类,是为了单独测试Activity而存在的,所以当你选择去测试service,receive的时候就不要选择它了,把它加入知识体系中是为了扩展对固有测试思路的联系,ActivityUnitTestCase会以与系统底层关联性最小的代价创建出来,是一个专门测试Activity的单元测试父类。这种与系统的关联性在setup与teardown方法中,系统已经自动帮你做了,你需要做得就是启动这个activity去做测试。
需要注意的是,作为纯单元测试,是不应该将activity运行起来进行测试的,或者不能有数据存储和交互依赖关系,下面的方法可以在这个类中调用,但是被调用的时候会抛出相关的excepiton信息。
下面的方法被调用的时候再UI层面上你是看不到任何反应的,但是能够调用以下2个方法测试activity并且传递相关参数。
使用方法举例:
下面的方法也在调用的时候不会开启activity,你可以使用 isFinishCalled() and getFinishedActivityRequest()在调取他们的时候拦截参数
例如,使用intent开启某个activity:
总结一下:ActivityUnitTestCase这个抽象类的作用是,开启某个activity,获取activity传递的参数,获取activity执行后的结果,能够给activity提供相关的参数进行启动,可以不运行在ui线程中,实现真正的单元测试activity,那么它符合测试的基本需求,输入相关参数,获取期望结果,验证。
谢谢。
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,那么它符合测试的基本需求,输入相关参数,获取期望结果,验证。
谢谢。