目前我們只為Subsection類生成了一個(gè)測(cè)試用例,在這節(jié)里,我們按照前述的方法,通過(guò)Test Case向?qū)镾tringUtils類創(chuàng)建一個(gè)測(cè)試用例代碼框架,并編寫(xiě)測(cè)試方法,然后將這兩個(gè)測(cè)試用例捆綁組合在一個(gè)測(cè)試套件中一起運(yùn)行。
選中StringUtils類,通過(guò)File->New..->Test,雙擊Test Case圖標(biāo)為StringUtils類的string2Array()方法創(chuàng)建測(cè)試用例,接受默認(rèn)的測(cè)試用例類名TestStringUtils。
在向?qū)傻臏y(cè)試用例代碼框架中,刪除測(cè)試固件(因?yàn)槭庆o態(tài)方法,沒(méi)有必要用固件),即刪除StringUtils的成員變量聲明,setUp()和tearDown()方法。并在類中定義一個(gè)isArrayEquals()的方法,刪除向?qū)傻膖estString2Array()測(cè)試方法體中的內(nèi)容,編寫(xiě)自己的測(cè)試代碼,其最終代碼如下所示:
代碼清單 錯(cuò)誤!文檔中沒(méi)有指定樣式的文字。TestStringUtils:StringUtils類的測(cè)試用例
1. package chapter25;
2. import junit.framework.*;
3. public class TestStringUtils extends TestCase
4. {
5. public void testString2Array() {
6. String str1 = null, str2 = ", str3 = "a", str4 = "a,b,c",str5 = ",a,b,";
7. String[] arr1 = null, arr2 = {"}, arr3 = {"a"}, arr4 = {"a", "b", "c"},
8. arr5 = {", "a", "b", "}, trimArr5 = {"a", "b"};
9.
10. assertNull(StringUtils.string2Array(str1, ',', false));
11. assertTrue(isArrayEquals(arr1, StringUtils.string2Array(str1, ',', false)));
12. assertTrue(isArrayEquals(arr2, StringUtils.string2Array(str2, ',', false)));
13. assertTrue(isArrayEquals(arr3, StringUtils.string2Array(str3, ',', false)));
14. assertTrue(isArrayEquals(arr4, StringUtils.string2Array(str4, ',', false)));
15. assertTrue(isArrayEquals(arr5, StringUtils.string2Array(str5, ',', false)));
16. assertTrue(isArrayEquals(trimArr5, StringUtils.string2Array(str5, ',', true)));
17. assertFalse(isArrayEquals(StringUtils.string2Array(str5, ',', false),
18. StringUtils.string2Array(str5, ',', true)));
19. }
20.
21. //判斷兩個(gè)字符數(shù)組是否相等
22. private boolean isArrayEquals(String[] arr1, String[] arr2) {
23. if (arr1 == null || arr2 == null) {
24. if (arr1 == null arr2 == null) {
25. return true;
26. } else {
27. return false;
28. }
29. } else if (arr1.length != arr2.length) {
30. return false;
31. } else {
32. for (int i = 0; i arr1.length; i++) {
33. if (!arr1[i].equals(arr2[i])) {
34. return false;
35. }
36. }
37. return true;
38. }
39. }
40. }
雖然JUnit框架提供了許多assertEquals()的重載方法,但卻沒(méi)有入?yún)⑹莾勺址當(dāng)?shù)組的assertEquals()重載方法,所以我們需要自己定義一個(gè)判斷兩字符串?dāng)?shù)組是否相同的方法:isArrayEquals(),如第22~39行所示。
在testString2Array()方法中,我們提供了覆蓋多數(shù)情況的字符串測(cè)試點(diǎn)(特殊轉(zhuǎn)換字符串和其目標(biāo)值),如第6~8行所示。爾后調(diào)用assertXxx()設(shè)置測(cè)試規(guī)則。你也可以像上一節(jié)中的TestSubsection測(cè)試用例一樣運(yùn)行它。
注意:
如果你在內(nèi)容窗格TestStringUtils文件標(biāo)簽上右擊,發(fā)現(xiàn)彈出的菜單中只有Run Test using "TestSubsection"時(shí),請(qǐng)?jiān)赑roject->Project Properties...->Run->在Run設(shè)置頁(yè)中取消TestSubsection運(yùn)行設(shè)置項(xiàng)的Context Menu選項(xiàng),否則只會(huì)運(yùn)行原TestSubsection的測(cè)試用例。
只包括10個(gè)類左右的小型項(xiàng)目工程也許無(wú)需用到測(cè)試套件,僅通過(guò)逐一單獨(dú)運(yùn)行測(cè)試用例來(lái)完成測(cè)試就可以了,但對(duì)于一個(gè)包含較多測(cè)試用例的工程,測(cè)試套件能給你帶來(lái)極大的方便,它將多個(gè)測(cè)試用例捆綁在一起運(yùn)行,達(dá)到一呼而百應(yīng)的批量處理效果。
下面我們就來(lái)為T(mén)estSubsection和TestStringUtils這兩個(gè)測(cè)試用例創(chuàng)建一個(gè)測(cè)試套件,并通過(guò)測(cè)試套件運(yùn)行這兩個(gè)測(cè)試。
1.File->New...->Test->在Test頁(yè)中雙擊Test Suite圖標(biāo)啟動(dòng)創(chuàng)建測(cè)試套件的向?qū)В缦聢D所示:
圖 錯(cuò)誤!文檔中沒(méi)有指定樣式的文字。選擇套件中捆綁的測(cè)試用例 在對(duì)話框列表中已經(jīng)列出了工程中已有的兩上測(cè)試用例類,你可以通過(guò)右邊的Add...和Remove添加或刪除測(cè)試用例。你可以通過(guò)Add Recursively,將指定目錄下的所有測(cè)試用例一并加入。
點(diǎn)擊Next到下一步。
2.指定測(cè)試套件類名。
圖 錯(cuò)誤!文檔中沒(méi)有指定樣式的文字。指定測(cè)試套件類名 接受JBuilder為測(cè)試套件所提供的默認(rèn)類名,按Finish完成該測(cè)試套件的創(chuàng)建,其代碼如下所示:
代碼清單 錯(cuò)誤!文檔中沒(méi)有指定樣式的文字。測(cè)試套件類
1. package chapter25;
2. import junit.framework.*;
3. public class TestSuite1
4. extends TestCase
5. {
6. public TestSuite1(String s) {
7. super(s);
8. }
9.
10. public static Test suite() {
11. TestSuite suite = new TestSuite();
12. suite.addTestSuite(chapter25.TestStringUtils.class);
13. suite.addTestSuite(chapter25.TestSubsection.class);
14. return suite;
15. }
16. }
測(cè)試套件類最主要的代碼是suite()方法(第10~15行),首先在方法中聲明一個(gè)TestSuite變量,通過(guò)addTestSuite()方法將TestStringUtils和TestSubsection測(cè)試用例捆綁在一起,你也可以通過(guò)這個(gè)方法添加其他的測(cè)試用例類。
TestSuite除可以將整個(gè)測(cè)試用例捆綁外,還可以捆綁另外的一個(gè)測(cè)試套件或一個(gè)測(cè)試用例中的測(cè)試方法:
l 添加一個(gè)測(cè)試套件
suite.addTest(suite_1)
l 添加測(cè)試用例某個(gè)方法
suite.addTest(new TestSubsection ("testGetValue"))
在工程窗格資源樹(shù)的TestSuite1文件節(jié)點(diǎn)上右擊,在彈出的菜單中選擇Run Test using Defaults,JBuilder啟動(dòng)JBTestRunner,運(yùn)行套件中捆綁的所有測(cè)試用例,其窗口如下圖所示:
圖 錯(cuò)誤!文檔中沒(méi)有指定樣式的文字。用測(cè)試套件運(yùn)行組合運(yùn)行多個(gè)測(cè)試用例 TestSuite下有兩個(gè)測(cè)試用例類,測(cè)試用例節(jié)點(diǎn)下是測(cè)試方法節(jié)點(diǎn)。