background image

 
而代码:  

if

 (names.contains(name))

  return;

 

  用于在逐级追溯过程中,防止不同级别父类中的 testXXX() 

 

方法重复加入 TestSuite 。

 

  对于符合条件的 testXXX() 方法,addTestMethod 方法中用语句:
 
  addTest(createTest(theClass, name));

 

 

   将 testXXX 

 

方法转化为 TestCase

 

,并加入到 TestSuite 。其中,addTest 

 

方法接受 Test 

 

接口类型的参数,其内部有 countTestCases 

 

方法和 run 

 

方法,该接口被 TestSuite 和 

TestCase 

 

同时实现。这是 Command 设计模式精神的体现,

  Command 模式将调用操作的对象与如何实现该操作的对象解耦。在运行时,TestCase 

 

或 TestSuite 

 

被当作 Test 命令对象,可以像一般对象那样进行操作和扩展,也可以在实现 

Composite 模式时将多个命令复合成一个命令。另外,增加新的命令十分容易,隔离了现

 

有类的影响,今后,也可以与备忘录模式结合,实现 undo 等高级功能。

 

  加入 TestSuite   

的 TestCase   

由 createTest(theClass, name) 方法创建,代码如下:

 

  图 13. CreateTest 函数代码(查看大图)  

 

   TestSuite   

和 TestCase 都有一个 fName 实例变量,是在其后的测试运行及结果返回阶

 

段中该 Test 

 

的唯一标识,对 TestCase 

 

来说,一般也是要测试的方法名。在 createTest 方法

 

中,测试方法被转化成一个 TestCase 实例,并通过:
 
  ((TestCase) test).setName(name);