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不会显示任何错误信息。