WebSphere Application Developer(WSAD)5.0提供了一組JUnit向?qū),簡化了JUnit的應(yīng)用。其中一個(gè)向?qū)軌蜃詣?dòng)生成JUnit測試代碼,同時(shí),WSAD的調(diào)試視圖還能夠清楚地顯示出JUnit測試的結(jié)果。
接下來我們來看看如何在WSAD中對下面的Java類進(jìn)行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;
}
}
這個(gè)類的功能是輸入一個(gè)字符串,例如“aa bb”,然后把它翻轉(zhuǎn)成逗號分隔的形式,即“bb,aa”。這個(gè)類用到了Jakarta的ORO包Perl4Util類的正則表達(dá)式功能。
為了進(jìn)行測試,首要要從http://jakarta.apache.org的Jakarta網(wǎng)站下載和安裝ORO包,從http://www.junit.org下載和安裝JUnit工具。當(dāng)然,你也可以修改ReverseName類,不要讓它使用Perl5Util類,免去安裝ORO包之勞。
下載好ORO包和JUnit工具后,在WSAD中創(chuàng)建一個(gè)新的項(xiàng)目,然后將ORO包和JUnit工具加入到項(xiàng)目的構(gòu)造路徑,再把上面的代碼粘貼到ReverseName.java。將ORO包和JUnit工具加入構(gòu)造路徑的步驟是:在瀏覽器視圖中選擇項(xiàng)目,按鼠標(biāo)右鍵,選擇“特性”,再選擇“Java構(gòu)建路徑”,在JAR文件選擇面板中,找到JUnit的安裝路徑并加入junit.jar文件。
創(chuàng)建JUnit測試實(shí)例的步驟是:在瀏覽器視圖中右擊ReverseName類文件,選擇菜單“新建”→“其他”,打開左邊樹形列表的Java節(jié)點(diǎn),如圖一,選擇JUnit,然后在右邊清單中選擇“測試實(shí)例”,點(diǎn)擊“下一步”。
向?qū)э@示出JUnit測試實(shí)例對話框。認(rèn)可默認(rèn)的源文件夾、包名稱、測試實(shí)例名稱等參數(shù)。選中main方法“public static void main(String[] args)”的檢查框,這時(shí),“對下列項(xiàng)添加TestRunner語句”選項(xiàng)將變?yōu)榭捎。在下拉列表框中,選擇text ui。選中另外兩個(gè)方法——setup()、tearDown()的檢查框,如圖二。點(diǎn)擊“下一步”。
在“選擇應(yīng)為其創(chuàng)建測試方法存根的方法”對話框中,如圖三,選中reverseName方法,然后點(diǎn)擊“完成”。
向?qū)⑸上铝写a:
// 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() {
}
}
對于該類,注意下面幾點(diǎn):
⑴ 它導(dǎo)入了junit.framework包。
⑵ 它擴(kuò)展了junit.framework.TestCase。
⑶ 它包含了兩個(gè)特殊的JUnit方法,即setUp和tearDown。
⑷ 它只有一個(gè)測試方法,testReverseName,方法名稱中帶有必需的前綴test。
⑸ 它的main方法運(yùn)行JUnit的文本版,調(diào)用特定的測試方法。
自動(dòng)生成的ReverseNameTest類還需要加入一些測試代碼。不過本例不需要在setUp和tearDown方法中加入代碼,之所以要在向?qū)е羞x中這兩個(gè)方法,是為了示范向?qū)У墓δ。對于?fù)雜一些的測試,我們可以讓setUp方法打開幾個(gè)文本流文件(或者是提取記錄集的JDBC數(shù)據(jù)庫連接),然后讓tearDown方法關(guān)閉這些文件流(或JDBC數(shù)據(jù)庫連接),JUnit將自動(dòng)在測試開始、結(jié)束處調(diào)用setUp和tearDown方法。
下面我們加入一個(gè)測試。在編輯器中打開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方法,可以對各種各樣的條件進(jìn)行測試。
保存修改之后,接下來可以運(yùn)行測試了。在ReverseNameTest代碼窗口仍打開的狀態(tài)下,打開“調(diào)試”透視圖。點(diǎn)擊ReverseNameTest編輯器,確保該類處于可見狀態(tài)。點(diǎn)擊“運(yùn)行”按鈕(圖標(biāo)為跑步的人)旁邊的下拉箭頭,選擇“運(yùn)行為”→“JUnit測試”。注意屏幕的底部有一個(gè)JUnit視圖,JUnit視圖顯示出下列內(nèi)容:
Failer Trace section:
junit.framework.ComparisionFailure:
expected<ff, ee>but was<ee, ff>
at denoncourt.Reverse
如果所有測試都順利通過,JUnit不會顯示任何錯(cuò)誤信息。