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 ”开始。