android单元测试

1、何为单元测试

     作为一个第一次使用单元测试的童鞋,还是有必要了解下何为单元测试,单元测试有啥好处!

    在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

    

    单元测试的好处在于以下几点:

    1、隔离程序部件并证明这些单个部件是正确的。一个单元测试提供了代码片断需要满足的严密的书面规约。因此,单元测试带来了一些益处。 单元测试在软件开发过程的早期就能发现问题。

    2、单元测试提供了系统的一种文档记录。借助于查看单元测试提供的功能和单元测试中如何使用程序单元,开发人员取得了程序单元API的基础直观的理解。

    3、单元测试允许程序员在未来重构代码,并且确保模块依然工作正确(复合测试)。这个过程就是为所有函数和方法编写单元测试,一旦变更导致错误发生,借助于单元测试可以快速定位并修复错误。

 

2、android单元测试介绍

junit.framework.TestCase
测试与Android环境无关的接口,可以继承自此类,例如对纯粹的日期格式转换等接口的测试。这种通过接口测试通常用于一个工具类的功能测试。

比如:

public class HelloTestextends InstrumentationTestCase {
    
 Hello mActivityTested;
 public HelloTest(){
  
 }
 

 @Override
 protected void setUp() throws Exception {
  Intent intent =new Intent();
  intent.setClassName("com.xmobileapp.hello",Hello.class.getName());
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  mActivityTested = (Hello)getInstrumentation().startActivitySync(intent);
  
 }

 

继承InstrumentationTestCase测试类的特点是需要将被测试项实例化。

      当你拿到mActivityTested这个实例后,就可以调用该类里面相应的方法来验证是否是符合你的预期。

如果时要做与activity相关或者时需要context上下文的时候就需要继承ActivityInstrumentationTestCase2<T>将activity传进去。

比如:

publicclass TestApp extends ActivityInstrumentationTestCase2<AddUT> {
    
    public TestApp()
    {
       super("com.xmobileapp", AddUT.class); 
    }
    
    public void testSum()
    {
       assertEquals(5, getActivity().add(2, 3));
    }
    
}

3、如何使用android单元测试:

这个有很多博客写了,我附一个链接吧

如何进行单元测试:http://www.cnblogs.com/feisky/archive/2010/07/23/1783826.html

camera系统的单元测试分析:http://mintelong.iteye.com/blog/460903

4、注意事项

4.1 测试的方法一定要是public的,不然会报错

4.2 如果是执行异步的操作,在测试方法中要将线程先wait,然后执行完成后调用notify去操作,比如:

private final Integer LOCK = 1;

public void test() throws Exception {

            ……异步操作的回掉方法

            synchronized(LOCK){

            LOCK.notify();

}

            try{

               synchronized(LOCK) {

                     LOCK.wait();

               }

          }catch(InterruptedException e) {

               Assert.assertNotNull(e);

          }}

 

测试中常用的方法
AndroidTestCase.getContext():
此函数的功能为得到Android系统的上下文对象,通过它可以取得contentResolver等对象。
ActivityInstrumentationTestCase.getActivity()
此函数的功能为得到被测Activity对象
assertTrue(String message,boolean condition)
声明状态是True
assertFalse(String message,boolean condition)
声明状态是False
assertEquals(String message,T expected,T expected)
声明两个对象相等
assertNotNull(String message,Object object)
声明对象不为空
assertNull(String message,Object object)
声明对象为空
fall(String message)
测试失败并附带一条消息

 

 

 

 



你可能感兴趣的:(编程,工作,android,单元测试,测试,文档)