快速业务通道

Java开源测试工具JUnit简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
的方式。其中之一便是class adapter(类适配器),其使用子类化来对接口进行适配。例如,为了将testMoneyEquals适配为runTest,我们实现了一个MoneyTest的子类并重写runTest方法来调用testMoneyEquals。

public class TestMoneyEquals extends MoneyTest { public TestMoneyEquals() { super("testMoneyEquals"); } protected void runTest () { testMoneyEquals(); } }

使用子类化需要我们为每一个测试案例都实现一个子类。这便给测试者放置了一个额外的负担。这有悖于JUnit的目标,即框架应该尽可能地使测试案例的增加变得简单。此外,为每一个测试方法创建一个子类会造成类膨胀(class bloat)。许多类将仅具有一个单独的方法,这种开销不值得,而且很难会提出有意义的名称。

Java提供了匿名内部类(anonymous inner class),其提供了一个让人感兴趣的Java所专门的方案来解决类的命名问题。通过匿名内部类我们能够创建一个Adapter而不必创造一个类的名称:

TestCase test= new MoneyTest("testMoneyEquals ") { protected void runTest() { testMoneyEquals(); } };

这与完全子类化相比要便捷许多。其是以开发者的一些负担作为代价以保持编译时期的类型检查(compile-time type checking)。Smalltalk Best Practice Pattern描述了另外的方案来解决不同实例的问题,这些实例是在共同的pluggable behavior(插件式行为)标题下的不同表现。该思想是使用一个单独的参数化的类来执行不同的逻辑,而无需进行子类化。

Pluggable behavior的最简单形式是Pluggable Selector(插件式选择器)。Pluggable Selector在一个实例变量中保存了一个Smalltalk的selector方法。该思想并不局限于Smalltalk,其也适用于Java。在Java中并没有一个selector方法的标记。但是Java reflection(反射) API允许我们可以根据一个方法名称的表示字符串来调用该方法。我们可以使用该种特性来实现一个Java版的pluggable selector。岔开话题而言,我们通常不会在平常的应用程序中使用反射。在我们的案例中,我们正在处理的是一个基础设施框架,因此它可以戴上反射的帽子。

JUnit可以让客户自行选择,是使用pluggable selector,或是实现上面所提到的匿名adapter类。正因如此,我们提供pluggable selector作为runTest方法的缺省实现。在该情况下,测试案例的名称必须要与一个测试方法的名称相一致。如下所示,我们使用反射来对方法进行调用。首先我们会查找Method对象。一旦我们有了method对象,便会调用它并传递其参数。由于我们的测试方法没有参数,所以我们可以传递一个空的参数数组。

protected void runTest() throws Throwable { Method runMethod= null; try { runMethod= getClass().getMethod(fName, new Class[0]); } catch (NoSuchMethodException e) { assert("Method \""+fName+"\" not found", false); } try { runMethod.invoke(this, new Class[0]); } // catch InvocationTargetException and IllegalAccessException }

JDK1.1的reflection API仅允许我们发现public的方法。基于这个原因,你必须将测试方法声明为public,否则将会得到一个NoSuchMethodException异常。

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

Java开源测试工具JUnit简介 - 编程入门网

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

Java开源测试工具JUnit简介(6)

时间:2011-01-01 cn-java 李巍

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

为了获得对系统状态的信心,我们需要运行许多测试。到现在为止,JUnit能够运行一个单独的测试案例并在一个TestResult中报告结果。我们接下来的挑战是要对其进行扩展

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号