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