UML软件工程组织

用WSAD的JUnit向导执行单元测试
作者:仙人掌工作室 编译 发文时间:2003.10.22
WebSphere Application Developer(WSAD)5.0提供了一组JUnit向导,简化了JUnit的应用。其中一个向导能够自动生成JUnit测试代码,同时,WSAD的调试视图还能够清楚地显示出JUnit测试的结果。

接下来我们来看看如何在WSAD中对下面的Java类进行JUnit测试:


// ReverseName.java 
import org.apache.oro.text.perl.*;

public class ReverseName {
  private Perl5Util perl = new Perl5Util();

  public String reverse(String in) {
    String out = perl.substitute( "s%([A-Z][a-z]*) ([A-Z][a-z]*)%$2, $1%", in);
    return out;
  }
}


这个类的功能是输入一个字符串,例如“aa bb”,然后把它翻转成逗号分隔的形式,即“bb,aa”。这个类用到了Jakarta的ORO包Perl4Util类的正则表达式功能。

为了进行测试,首要要从http://jakarta.apache.org的Jakarta网站下载和安装ORO包,从http://www.junit.org下载和安装JUnit工具。当然,你也可以修改ReverseName类,不要让它使用Perl5Util类,免去安装ORO包之劳。

下载好ORO包和JUnit工具后,在WSAD中创建一个新的项目,然后将ORO包和JUnit工具加入到项目的构造路径,再把上面的代码粘贴到ReverseName.java。将ORO包和JUnit工具加入构造路径的步骤是:在浏览器视图中选择项目,按鼠标右键,选择“特性”,再选择“Java构建路径”,在JAR文件选择面板中,找到JUnit的安装路径并加入junit.jar文件。

创建JUnit测试实例的步骤是:在浏览器视图中右击ReverseName类文件,选择菜单“新建”→“其他”,打开左边树形列表的Java节点,如图一,选择JUnit,然后在右边清单中选择“测试实例”,点击“下一步”。



图一


向导显示出JUnit测试实例对话框。认可默认的源文件夹、包名称、测试实例名称等参数。选中main方法“public static void main(String[] args)”的检查框,这时,“对下列项添加TestRunner语句”选项将变为可用。在下拉列表框中,选择text ui。选中另外两个方法——setup()、tearDown()的检查框,如图二。点击“下一步”。



图二


在“选择应为其创建测试方法存根的方法”对话框中,如图三,选中reverseName方法,然后点击“完成”。



图三


向导将生成下列代码:


// ReverseNameTest.java

import junit.framework.TestCase;
public class ReverseNameTest extends TestCase {

  public ReverseNameTest(String arg0) {super(arg0);}

  public static void main(String[] args) {
    junit.textui.TestRunner.run(ReverseNameTest.class);
  }

  protected void setUp() throws Exception {
    super.setUp();    
  }
  protected void tearDown() throws Exception {
    super.tearDown();
  }
  public void testReverseName() {
  }
}


对于该类,注意下面几点:

⑴ 它导入了junit.framework包。

⑵ 它扩展了junit.framework.TestCase。

⑶ 它包含了两个特殊的JUnit方法,即setUp和tearDown。

⑷ 它只有一个测试方法,testReverseName,方法名称中带有必需的前缀test。

⑸ 它的main方法运行JUnit的文本版,调用特定的测试方法。

自动生成的ReverseNameTest类还需要加入一些测试代码。不过本例不需要在setUp和tearDown方法中加入代码,之所以要在向导中选中这两个方法,是为了示范向导的功能。对于复杂一些的测试,我们可以让setUp方法打开几个文本流文件(或者是提取记录集的JDBC数据库连接),然后让tearDown方法关闭这些文件流(或JDBC数据库连接),JUnit将自动在测试开始、结束处调用setUp和tearDown方法。

下面我们加入一个测试。在编辑器中打开ReverseNameTest,修改testReverseName方法,使其包含下列代码:


public void testReverseName() {
  ReverseName  fix = new ReverseName();
  assertEquals(
    fix.reverse("aa bb"), 
        "bb, aa");
  assertEquals(
    fix.reverse("cc dd"),
        "dd, cc");
  assertEquals(
      fix.reverse("ee ff"),
        "ee, ff");
}


TestCase基类提供了大量的assert方法,可以对各种各样的条件进行测试。

保存修改之后,接下来就可以运行测试了。在ReverseNameTest代码窗口仍打开的状态下,打开“调试”透视图。点击ReverseNameTest编辑器,确保该类处于可见状态。点击“运行”按钮(图标为跑步的人)旁边的下拉箭头,选择“运行为”→“JUnit测试”。注意屏幕的底部有一个JUnit视图,JUnit视图显示出下列内容:


Failer Trace section:
junit.framework.ComparisionFailure: 
expected<ff, ee>but was<ee, ff>
at denoncourt.Reverse


如果所有测试都顺利通过,JUnit不会显示任何错误信息。

本文译自http://www.e-promag.com/epnewsletters//index.cfm?fuseaction=ShowNewsletterItem&ID=3981


 

版权所有:UML软件工程组织