ActivityUnitTestCase示例

来源:互联网 发布:js修改url参数 不刷新 编辑:程序博客网 时间:2024/06/05 18:46

点击打开链接

ActivityUnitTestCase 通常用来测试单独Activity。在启动被测试的Activity之前,你可以Inject一个假的Context或是Application ,使用这个Mock的Context中一个隔离环境中运行被测试的Activity。通常用于Activity的单元测试,而不和Anroid系统进行交互。

ActivityUnitTestCase 的类继承关系如下图:

应该要注意的是,作为单纯的单元测试,被测试的Activity 不运行在一般应用运行的环境中也不和其它Activity产生交互。在这种情况下,不能调用下面的方法,如果调用一般会抛出异常:

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

下面的方法可以调用,但一般不起任何作用,你可以使用getStartedActivityIntent()和getStartedActivityRequest() 来检查参数值。

startActivity(Intent)
startActivityForResult(Intent, int)

下面的方法也可以调用,一般也无效果,可以使用isFinishCalled() 和getFinishedActivityRequest检查传入的参数。

finish()
finishFromChild(Activity)
finishActivity(int)

ForwardingTest 的代码如下:

[java] view plaincopyprint?
  1. public class ForwardingTest  
  2.  extends ActivityUnitTestCase<Forwarding> {  
  3.    
  4.  private Intent mStartIntent;  
  5.  private Button mButton;  
  6.    
  7.  public ForwardingTest() {  
  8.  super(Forwarding.class);  
  9.  }  
  10.    
  11.  @Override  
  12.  protected void setUp() throws Exception {  
  13.  super.setUp();  
  14.    
  15.  mStartIntent = new Intent(Intent.ACTION_MAIN);  
  16.  }  
  17.    
  18.  @MediumTest  
  19.  public void testPreconditions() {  
  20.  startActivity(mStartIntent, nullnull);  
  21.  mButton = (Button) getActivity().findViewById(R.id.go);  
  22.    
  23.  assertNotNull(getActivity());  
  24.  assertNotNull(mButton);  
  25.  }  
  26.    
  27.  @MediumTest  
  28.  public void testSubLaunch() {  
  29.  Forwarding activity  
  30.  = startActivity(mStartIntent, nullnull);  
  31.  mButton = (Button) activity.findViewById(R.id.go);  
  32.    
  33.  mButton.performClick();  
  34.    
  35.  assertNotNull(getStartedActivityIntent());  
  36.  assertTrue(isFinishCalled());  
  37.  }  
  38.    
  39.  @MediumTest  
  40.  public void testLifeCycleCreate() {  
  41.  Forwarding activity  
  42.  = startActivity(mStartIntent, nullnull);  
  43.  getInstrumentation().callActivityOnStart(activity);  
  44.  getInstrumentation().callActivityOnResume(activity);  
  45.    
  46.  getInstrumentation().callActivityOnPause(activity);  
  47.    
  48.  getInstrumentation().callActivityOnStop(activity);  
  49.  }  
  50.    
  51. }  


 

在setUp 中,创建了一个Mock Intent 对象mStartIntent 用于测试Activity。

按惯例测试方法testPreconditions 通常作为第一个测试方法,如果该方法Fail的话,表示测试所需的条件不满足,此时其它测试一般也会Fail 。但这个方法并不一定是第一个运行。

testSubLaunch 可以测试当前Activity能否成功启动其它Activity,方法getStartedActivityRequest 返回 当前Activity调用startActivityForResult(Intent, int) 的request code. 方法isFinishCalled 将在当前activity 调用finish()或finishActivity, finishFromChild 后返回true. Forwarding 示例参照Android ApiDemos示例解析(7):App->Activity->Forwarding

testLifeCycleCreate 测试Activity的生命周期回调函数,使用getInstrumentation取的Instrumentation 对象,通过Instrumentation对象可以调用Activity对应的生命周期回调函数来测试Activity的onCreate, onStart,onResume 等方法。

ActivityUnitTestCase 还提供了sendKeys 方法模拟按键事件,可以用来测试UI。


0 0
原创粉丝点击