Android测试教程(9):ApplicationTestCase示例

来源:互联网 发布:java两个字符串比较 编辑:程序博客网 时间:2024/04/29 20:55

前面介绍了Android测试的一些理论知识,从本篇开始的几篇将结合ApiDemoTest示例来介绍Android测试的实例。在此之前可以参照Android测试教程(3):测试项目 创建ApiDemos->tests 测试项目,本项目测试用来测试ApiDemos,主要目的是介绍Android测试框架的使用方法。

当然要测试ApiDemos,事先要创建好项目ApiDemos。下图显示了创建好ApiDemos->Tests后,ApiDemos->Tests中所含的Java类:

Android测试项目也是一个Android应用项目,其基本使用方法和开发一般的Android应用非常类似,Android测试项目主要是利用Android测试框架编写测试用例来测试对应的Android应用的各个方面。

其中AllTests.java 定义如下:

[java] view plaincopyprint?
  1. public class AllTests extends TestSuite {  
  2.    
  3.  public static Test suite() {  
  4.  return new TestSuiteBuilder(AllTests.class)  
  5.  .includeAllPackagesUnderHere()  
  6.  .build();  
  7.  }  
  8. }  

使用TestSuiteBuilder 指明所有该包和其子包中定义的TestCase都为最终TestSuite 的一部分(需要被运行的测试)。

AllTests.java 一般可以不用修改的应用到大部分的测试项目中,如果有特殊需要,可以使用android.test.suitebuilder 的类定义那些Testcase 需要包含到最终的测试包(Test Suite)中.

ApiDemosApplicationTests 测试介绍ApplicationTestCase的基本使用方法。

下图为ApplicationTestCase 的继承关系:

ApplicationTestCase 主要用来测试Application 类,提供了对Application类生命周期方法的基本支持,并可以支持一些dependency injection 以帮助构造测试Application的的环境。

Application Lifecycle 支持, 每个Application运行 都遵循一定的顺序(生命周期方法),ApplicationTestCase提供下面方法来支持对Application生命周期方法的测试:

  • 只有当测试用例调用createApplication()后才会执行Application 的onCreate 方法,从而使得你有机会在调用Application的onCreate方法之前对测试框架做些调整。
  • 当测试用例结束时,测试用例的tearDown 方法会被调用,然后会调用Application 的onDestroy()方法停止和销毁Application.

Dependency Injection 每个Application都依赖于运行它的Context 对象,Android测试框架允许你注入一个Mock的或者孤立的context 对象,以实现真正的单元测试,如果只是想做一般的测试,你的Application方法将被注入全功能的Context对象,你可以使用setContext 来注入你定义的Mock 的Context对象,setContext 必须在createApplication 之前调用。测试框架提供了如MockContext, RenamingDelegatingContext, ContextWrapper 来帮助你构造用于测试Applicaton的Context对象。

本例的代码如下:


[java] view plaincopyprint?
  1. public class ApiDemosApplicationTests  
  2.  extends ApplicationTestCase<ApiDemosApplication> {  
  3.    
  4.  public ApiDemosApplicationTests() {  
  5.  super(ApiDemosApplication.class);  
  6.  }  
  7.    
  8.  @Override  
  9.  protected void setUp() throws Exception {  
  10.  super.setUp();  
  11.  }  
  12.    
  13.  @SmallTest  
  14.  public void testPreconditions() {  
  15.  }  
  16.    
  17.  /** 
  18.  * Test basic startup/shutdown of Application 
  19.  */  
  20.  @MediumTest  
  21.  public void testSimpleCreate() {  
  22.  createApplication();  
  23.  }  
  24.    
  25. }  


 

有几个新知识

1. @SmallTest 和@MediumTest标注

Android测试框架可以使用@SmallTest,@MediumTest和@LargeTest 来标注测试方法,这些分类划分主要是根据测试访问数据的位置,如本地,SD卡,网络,下表为通常划分测试等级的基本方法:

FeatureSmallMediumLargeNetwork accessNolocalhost onlyYesDatabaseNoYesYesFile system accessNoYesYesUse external systemsNoDiscouragedYesMultiple threadsNoYesYesSleep statementsNoYesYesSystem propertiesNoYesYesTime limit (seconds)60300900+

2. testPreconditions

testPreconditions 测试主要用来运行其它测试方法之前来校验Application 对象的初始化情况,和setUp类似,但和setUp 不同的是,testPreconditions只会被运行一次,而setUp通常在执行每个测试方法之前都会运行一次,一般需把它做为Application第一个测试方法,但由于JUnit使用Reflection 来取得测试方法,因此并不一定能保证testPreconditions一定在其它测试方法之前运行。

testSimpleCreate 为测试Application 的测试方法,调用createApplication 会触发Application 的onCreate 方法,测试结束后,执行tearDown ,然后调用Application 的onDestroy 方法,如果Application 的onCreate, onDestroy 运行抛出异常的话,则本测试方法失败,否则表示测试通过。

ApplicationTestCase 还提供了一个terminateApplication 中止Application,可以测试Application 的onTerminate 方法

0 0