Java开源测试工具JUnit简介 - 编程入门网
的方式。其中之一便是class adapter(类适配器),其使用子类化来对接口进行适配。例如,为了将testMoneyEquals适配为runTest,我们实现了一个MoneyTest的子类并重写runTest方法来调用testMoneyEquals。
使用子类化需要我们为每一个测试案例都实现一个子类。这便给测试者放置了一个额外的负担。这有悖于JUnit的目标,即框架应该尽可能地使测试案例的增加变得简单。此外,为每一个测试方法创建一个子类会造成类膨胀(class bloat)。许多类将仅具有一个单独的方法,这种开销不值得,而且很难会提出有意义的名称。 Java提供了匿名内部类(anonymous inner class),其提供了一个让人感兴趣的Java所专门的方案来解决类的命名问题。通过匿名内部类我们能够创建一个Adapter而不必创造一个类的名称:
这与完全子类化相比要便捷许多。其是以开发者的一些负担作为代价以保持编译时期的类型检查(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对象,便会调用它并传递其参数。由于我们的测试方法没有参数,所以我们可以传递一个空的参数数组。
JDK1.1的reflection API仅允许我们发现public的方法。基于这个原因,你必须将测试方法声明为public,否则将会得到一个NoSuchMethodException异常。 在下面的设计快照中,添加进了Adapter和Pluggable Selector。 图4 TestCase应用Adapter(与一个匿名内部类一起)或Pluggable Selector Java开源测试工具JUnit简介(6)时间:2011-01-01 cn-java 李巍3.5 不必关心一个或多个-TestSuit 为了获得对系统状态的信心,我们需要运行许多测试。到现在为止,JUnit能够运行一个单独的测试案例并在一个TestResult中报告结果。我们接下来的挑战是要对其进行扩展 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |