您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
JUNIT源码探秘系列(下)
作者:网络转载 发布时间:[ 2013/4/16 14:34:04 ] 推荐标签:

Client(客户端)

  public static void main(String[] args)

  {

     Component leaf1 = new Leaf();

     Component leaf2 = new Leaf();   

     Composite comp1 = new Composite();

   

     comp1.add(leaf1);

     comp1.add(leaf2);   

     Component leaf3 = new Leaf();

     Component leaf4 = new Leaf();   

     Composite comp2 = new Composite(); 

     comp2.add(comp1);

     comp2.add(leaf3);

     comp2.add(leaf4);   

     comp2.doSomething();

}

这样对组合模式基本分析完成,继续接着看下在Junit组合模式是样实现的呢?

在Junit中有连个重要的概念,一个是TestCase一个是TestSuite;TestSuite是一个测试集合,一个TestSuite中可以包含一个或者多个TestSuite,当然也可以一个或者多个TestCase,而这两个对象都继承与Test接口。这样一分析,Test接口相当于组合模式中的抽象构件角色(Component),TestSuite相当于树枝构件角色(Composite),TestCase相当于树叶构件角色(Leaf)。接着我们对具体代码分析看看这块是否满足组合模式。

Test接口类:

public interface Test {

 

   public abstract int countTestCases();

 

   public abstract void run(TestResult result);

}

TestSuite实现:

 

  public int countTestCases() {

     int count= 0;

     for (Enumeration e= tests(); e.hasMoreElements(); ) {

        Test test= (Test)e.nextElement();

        count= count + test.countTestCases();

     }

     return count;

  }

 

  public void run(TestResult result) {

     for (Enumeration e= tests(); e.hasMoreElements(); ) {

        if (result.shouldStop() )

            break;

        Test test= (Test)e.nextElement();

        runTest(test, result);

     }

}

TestCase实现

  public int countTestCases() {

     return 1;

  }

public void run(TestResult result) {

     result.run(this);

}

根据代码分析,Junit使用Composite模式后简化了JUnit的代码,JUnit可以统一处理组合结构TestSuite和单个对象TestCase。使JUnit开发变得简单容易,因为不需要区分部分和整体的区别,不需要写一些充斥着if else的选择语句。

另外,通过对TestCase对象和TestSuite的类层次结构基本对象的定义,TestCase可以被组合成更复杂的组合对象TestSuite,而这些组合对象又可以被组合,这样不断地递归下去。在程序的代码中,任何使用基本对象的地方都可方便的使用组合对象,大大简化系统维护和开发。

上一页1234567下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd