background image

 
TestSuite 采用了 Composite 

 

设计模式。在该模式下,可以将 TestSuite 比作一棵树,树中可

以包含子树(

 

其它 TestSuite)

 

,也可以包含叶子 (TestCase),以此向下递归,直到底层全部

 

落实到叶子为止。 JUnit 

 

采用 Composite 模式维护测试集合的内部结构,使得所有分散的 

TestCase 

 

能够统一集中到一个或若干个 TestSuite 

 

中,同类的 TestCase 在树中占据同等的

位置,便于统一运行处理。另外,采用这种结构使测试集合获得了无限的扩充性,不需要

 

重新构造测试集合,就能使新的 TestCase 不断加入到集合中。

 

  在 TestSuite 类的代码中,可以找到:
 
  

private

 Vector fTests = 

new

 Vector(

10

);

  此即为内部维护的 子树或树叶 的列表。

 

 

   红框内的代码完成提取整个类继承体系上的测试方法的提取。循环语句由 Class 类型

 

的实例 theClass 

 

开始,逐级向父类的继承结构追溯,直到顶级 Object 类,并将沿途各级

 

父类中所有合法的 testXXX() 

 

方法都加入到 TestSuite 中。

 

  合法 testXXX 的判断工作由:
 
  addTestMethod(methods[i], names, theClass)

 

  完成,实际上该方法还把判断成功的方法转化为 TestCase 

 

对象,并加入到 TestSuite 

 

中。代码如下图 :

 

  图 12. addTestMethod 函数代码  

 

  首先通过 String name= m.getName(); 

 

利用 Refection API 

 

获得 Method 

 

对象 m 的方法名,

用于特征判断。然后通过方法
  isTestMethod(Method m)
  中的
 
 

 

return   parameters.length   == 

0

 

&& 

name.startsWith(

"test"

)   && 

returnType.equals(Void.TYPE);

“ 

  来判别方法名是不是以字符串 test ”开始。