Android、JUnit深入浅出(三)——JUnit深入解析(上)

来源:互联网 发布:手机软件连不上网络 编辑:程序博客网 时间:2024/05/02 03:02

Android、JUnit深入浅出(三)——JUnit深入解析(上)

通过前面2篇文章的学习,我们对JUnit有了初步的认识,下面我们将深入的解析JUnit数据包。整个JUnit的数据包应该是很强大的,但是一般来说,不一定每个工程都需要这些数据包,而是在JUnit部分数据包的基础上扩展出自己的数据包,Android SDK中也不例外。至于JUnit完整的包,这里我们就不详细分析了,我们这里只解析Android SDK中包含的那些JUnit数据包,以及Android SDK在JUnit的基础上扩展的一些数据包,如下:

SDK功能说明junit.frameworkJUnit测试框架junit.runner实用工具类支持JUnit测试框架android.testAndroid 对JUnit测试框架的扩展包android.test.mockAndroid的一些辅助类android.test.suitebuilder实用工具类,支持类的测试运行

在这些包中最为重要的是:junit.frameworkandroid.test,其中前者是JUnit的核心包,后者是Andoid SDK在Junit.framework的基础上扩展出来的包,我们将重点解析这2个包。

首先解析junit.framework包,结构如下:

junit.framework

通过这张图,大家就可以比较清晰的看到JUnit的主要框架,再回去看下上篇文章的例子,对前面的例子感觉明白多了。做个简要的总结,如下:

  1. TestSuit:TestSuite是测试用例的集合;
  2. TestCase:定义运行多个测试用例;
  3. TestResult:收集一个测试案例的结果,测试结果分为失败和错误,如果未能预计的断言就是失败,错误就像一个ArrayIndexOutOfBoundsException异常而导致的无法预料的问题;
  4. TestFailure:测试失败时捕获的异常;
  5. Assert:断言的方法集,当断言失败时显示信息;

TestCase与TestSuite之间的关系,有些类似于图元对象与容器对象之间的关系,在面向对象的语言C++、JAVA中较常见,在这里就不多说了。

举个简单的例子,并简要说明过程

第一步:实现TestCase

  1. 继承父类TestCase;
  2. 定义一下变量在测试中使用;
  3. 在setUp()中初始化这些变量;
  4. 在tearDown()中清理这些变量;
    public class MathTest extends TestCase{
    protected double fValue1;
    protected double fValue2;
    protected void setUp(){
    fValue1= 2.0;
    fValue2= 3.0;
    }
    }
  5. 编写测试单元代码;
    public void testAdd() {
    double result= fValue1 + fValue2;
    assertTrue(result == 5.0);
    }
  6. 运行测试用例,这里有2种方法可以使用:
  • 静态类型:覆盖runTes()和定义测试函数。最常用的就是采用java的匿名类,如下:
    TestCase test= new MathTest(”add”){
    public void runTest() { testAdd();}
    };
    test.run();
  • 动态类型:使用反射来实现runTest,它动态地发现并调用的方法,在这种情况下,测试案例的名字对应的测试方法来运行,如下:TestCase= new MathTest(”testAdd”);
    test.run();

    相比之下,第2种更符合面向对象的思维。

第二步:将TestCase添加到TestSuilt

           TestSuite suite= new TestSuite();
           suite.addTest(new MathTest("testAdd"));

由于TestSuite可以自动从TestCase中提取测试单元并运行,也可以用如下方法:

           TestSuite suite= new TestSuite(MathTest.class);

一个测试用例就完成了,想要更加详细的了解junit.framework,还是到Android SDK中仔细阅读。

总结说明

看了这些代码,再仔细看下JUnit的结构图,是不是感觉更加清晰了,下一篇幅我们将深入解析android.test包。

原创粉丝点击