Java测试工具JUnit_3

 

在下面的设计快照中,添加进了Adapter和Pluggable Selector。


图4 TestCase应用Adapter(与一个匿名内部类一起)或Pluggable Selector

  3.5 不必关心一个或多个-TestSuit

  为了获得对系统状态的信心,我们需要运行许多测试。到现在为止,JUnit能够运行一个单独的测试案例并在一个TestResult中报告结果。我们接下来的挑战是要对其进行扩展,以使其能够运行许多不同的测试。当测试调用者不必关心其运行的是一个或多个测试案例时,这个问题便能够轻松地解决。能够在该情况下度过难关的一个流行模式就是Composite(组合)。摘引其意图,“将对象组合成树形结构以表示‘部分-整体’的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。”在这里‘部分-整体’的层次结构是让人感兴趣的地方。我们想支持能够层层相套的测试套件。

  Composite引入如下的参与者:

  · Component:声明我们想要使用的接口,来与我们的测试进行交互。

  · Composite:实现该接口并维护一个测试的集合。

  · Leaf:代表composite中的一个测试案例,其符合Component接口。

  该模式告诉我们要引入一个抽象类,来为单独的对象和composite对象定义公共的接口。这个类的基本意图就是定义一个接口。在Java中应用Composite时,我们更倾向于定义一个接口,而非抽象类。使用接口避免了将JUnit提交成一个具体的基类来用于测试。所必需的是这些测试要符合这个接口。因此我们对模式的描述进行变通,并引入一个Test接口:

public interface Test { 
public abstract void run(TestResult result); 
}

  TestCase对应着Composite中的一个Leaf,并且实现了我们上面所看到的这个接口。

  下面,我们引入参与者Composite。我们将其取名为TestSuit(测试套件)类。TestSuit在一个Vector中保存了其子测试(child test):

public class TestSuite implements Test { 
private Vector fTests= new Vector(); 
}

  run()方法对其子成员进行委托(delegate):

public void run(TestResult result) { 
for (Enumeration e= fTests.elements(); e.hasMoreElements(); ) { 
Test test= (Test)e.nextElement(); 
test.run(result); 

}


图5 TestSuit应用Composite

  最后,客户必须能将测试添加到一个套件中,它们将使用addTest方法来这样做:

public void addTest(Test test) { 
fTests.addElement(test); 
}

  注意所有上面的代码是如何仅对Test接口进行依赖的。由于TestCase和TestSuit两者都符合Test接口,我们可以递归地将测试套件再组合成套件。所有开发者都能够创建他们自己的TestSuit。我们可创建一个组合了这些套件的TestSuit来运行它们所有的。

  下面是一个创建TestSuit的示例:

public static Test suite() { 
TestSuite suite= new TestSuite(); 
suite.addTest(new MoneyTest("testMoneyEquals")); 
suite.addTest(new MoneyTest("testSimpleAdd")); 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值