軟件測(cè)試單體測(cè)試_第1頁(yè)
軟件測(cè)試單體測(cè)試_第2頁(yè)
軟件測(cè)試單體測(cè)試_第3頁(yè)
軟件測(cè)試單體測(cè)試_第4頁(yè)
軟件測(cè)試單體測(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章單元測(cè)試本章目標(biāo)能夠應(yīng)用JUnit進(jìn)行單元測(cè)試掌握J(rèn)Unit+EclEmma進(jìn)行覆蓋率測(cè)試coverassertsamefeature本章單詞:unitemmaequalsplugin單元測(cè)試簡(jiǎn)介單元測(cè)試就是測(cè)試程序員依據(jù)其所設(shè)想的方式開(kāi)發(fā)出來(lái)的程序是否產(chǎn)生了預(yù)期的結(jié)果。單元測(cè)試是與軟件開(kāi)發(fā)生命周期中的編碼階段結(jié)合起來(lái)的,并且只有項(xiàng)目具備各個(gè)窗體、報(bào)表和屏幕之后才能開(kāi)始進(jìn)行測(cè)試。編碼階段的基本單元式:程序、函數(shù)、過(guò)程、窗體、或者圖形用戶界面。在單元測(cè) 試中,需要測(cè)試以下內(nèi)容:代碼的控制流程、給函數(shù)傳遞參數(shù)值、從函數(shù)獲取值是否正確。另外,單元測(cè)試不只限于檢查控制流程或者程序的執(zhí)行,還檢查代

2、碼是否遵循編碼標(biāo)準(zhǔn)。在對(duì)每個(gè)模塊進(jìn)行單元測(cè)試時(shí),不能完全忽視它們和周圍模塊的相互關(guān)系。為模擬這一聯(lián)系,在進(jìn)行測(cè)試時(shí),需設(shè)置若干輔助測(cè)試模塊。輔助模塊有兩種,一種是驅(qū)動(dòng)模 塊,用以模擬被測(cè)試模塊的上級(jí)模塊。驅(qū)動(dòng)模塊在單元測(cè)試中接收測(cè)試數(shù)據(jù),把相關(guān)的數(shù)據(jù)傳送給被測(cè)模塊,啟動(dòng)被測(cè)模塊,并打印出相應(yīng)的結(jié)果。另一種是樁模塊,用以模擬被測(cè)試模塊工作過(guò)程中所調(diào)用的模塊。樁模塊由被測(cè)模塊調(diào)用,它們一般只進(jìn)行很少的數(shù)據(jù)處理,例如打印人口和返回,以便于檢查被測(cè)試模塊與其下級(jí)模塊的接口。測(cè)試中通常使用測(cè)試驅(qū)動(dòng)模塊和樁模塊。測(cè)試驅(qū)動(dòng)程序是幫助執(zhí)行軟件以檢查其是否工作的軟件。此程序提供一個(gè)框架來(lái)設(shè)置參數(shù)、執(zhí)行單元并記錄

3、結(jié)果。樁模塊不是實(shí)際單元而是模型,用以取代實(shí)際單元并幫助執(zhí)行測(cè)試過(guò)程。開(kāi)發(fā)人員將測(cè)試作為編程的必要過(guò)程,并采用單元測(cè)試來(lái)驗(yàn)證它們的代碼是否執(zhí)行預(yù)期的功能。開(kāi)放源碼的單元測(cè)試框架有 JUnit和Nunit o JUnit適用于Java應(yīng)用程序, 它是由SmallTalk的Sunit派生而來(lái)。Nunit用于測(cè)試.NET程序。PHPUnit是一個(gè)輕量 級(jí)的PH國(guó)U試框架。JavaScript 有JsUnit ,數(shù)據(jù)庫(kù)有 DBUnitJUnitJUnit 簡(jiǎn)介JUnit是由ErichGamma和KentBeck編寫(xiě)的一個(gè)回歸測(cè)試框架。JUnit測(cè)試是程序員測(cè)試,即所謂白盒測(cè)試,因?yàn)槌绦騿T知道被測(cè)試的軟

4、件如何(HoW)完成功能和完成什么樣(What)的功能。JUnit是一套框架,繼承 TestCase類,就可以用 JUnit進(jìn)行 自動(dòng)測(cè)試了。JUnit是一個(gè)開(kāi)放源代碼的 Java測(cè)試框架,用于編寫(xiě)和運(yùn)行可重復(fù)的測(cè)試。它是用于單元測(cè)試框架體系 xUnit的一個(gè)實(shí)例(用于java語(yǔ)言)。它包括以下特性:多用于測(cè)試期望結(jié)果的斷言(Assertion )。金 用于共享共同測(cè)試數(shù)據(jù)的測(cè)試工具。全用于方便的組織和運(yùn)行測(cè)試的測(cè)試套件。畬 圖形和文本的測(cè)試運(yùn)行器。另外JUnit是在xp編程(Extreme Programming )和重構(gòu)(refactor )中被極力推 薦使用的工具,因?yàn)樵趯?shí)現(xiàn)自動(dòng)單元測(cè)試

5、的情況下可以大大的提高開(kāi)發(fā)的效率,但是實(shí)際上編寫(xiě)測(cè)試代碼也是需要耗費(fèi)很多的時(shí)間和精力的,那么使用這JUnit好處到底在哪里呢?有以下幾點(diǎn)供參考:A對(duì)于xp編程而言要求在編寫(xiě)代碼之前先寫(xiě)測(cè)試,這樣可以強(qiáng)制你在寫(xiě)代碼之前好好的思考代碼(方法)的功能和邏輯,否則編寫(xiě)的代碼很不穩(wěn)定,那么你需要同時(shí)維護(hù)測(cè)試代碼和實(shí)際代碼,這個(gè)工作量就會(huì)大大增加。因此在 xp編程中,基本過(guò)程是這樣的:構(gòu)思一編寫(xiě)測(cè) 試代碼一編寫(xiě)代碼一測(cè)試,而且編寫(xiě)測(cè)試和編寫(xiě)代碼都是增量式的,寫(xiě)一點(diǎn)測(cè)一點(diǎn),在編寫(xiě)以后的代碼中如果發(fā)現(xiàn)問(wèn)題可以較快的追蹤到問(wèn)題的原因,減小回歸錯(cuò)誤的糾錯(cuò)難度。日對(duì)于重構(gòu)而言其好處和xp編程中是類似的,因?yàn)橹貥?gòu)也是

6、要求改一點(diǎn)測(cè)一點(diǎn),減少回歸錯(cuò)誤造 成的時(shí)間消耗。C對(duì)于非以上兩種情況我們?cè)陂_(kāi)發(fā)的時(shí)候使用 JUnit寫(xiě)一些適當(dāng)?shù)臏y(cè)試也是有必要的,因?yàn)橐话阄覀円彩切枰帉?xiě)測(cè)試的代碼的,可能原來(lái)不是使用的JUnit ,如果使用JUnit ,而且針對(duì)接口(方法)編寫(xiě)測(cè)試代碼會(huì)減少以后的維護(hù)工作,例如以后對(duì)方法內(nèi)部的修改(這個(gè)就是相當(dāng)于重構(gòu)的工作了)。另外就是因?yàn)镴Unit有斷言功能,如果測(cè)試結(jié)果不通過(guò)會(huì)告訴 我們哪個(gè)測(cè)試不通過(guò), 是什么原因。而不是寫(xiě)一些測(cè)試代碼看其輸出結(jié)果,然后再由自己來(lái)判斷結(jié)果使用正確,使用JUnit的好處就是這個(gè)結(jié)果是否正確的判斷是它來(lái)完成的,我們只需要看看它告訴我們結(jié)果是否正確就可以了,在

7、一般情況下會(huì)大大提高效率。在測(cè)試代碼時(shí),必須遵守特定的命名慣例,待測(cè)的每種方法的命名應(yīng)該testXXXX()的格式。任何編寫(xiě)的測(cè)試代碼應(yīng)執(zhí)行并完成以下任務(wù): 急 設(shè)置測(cè)試所需要的所有條件。去調(diào)用待測(cè)的方法。去 驗(yàn)證待測(cè)的方法是否執(zhí)行預(yù)期的功能。金清除。測(cè)試代碼的編寫(xiě)方式與程序代碼相同。除了在測(cè)試代碼中會(huì)用到附加庫(kù)以外,其他的與程序代碼相同。 在執(zhí)行的時(shí)候,執(zhí)行測(cè)試代碼而不是實(shí)際的項(xiàng)目代碼。測(cè)試代碼在一定程度上控制條件下檢查項(xiàng)目代碼。JUnit提供一些測(cè)試方法,用于判斷正在測(cè)試的特定方法是否正確執(zhí)行那個(gè)功能。這些方法被稱為asserts(),它斷言某個(gè)特定條件是否為真。斷言是單元測(cè)試中的基本 結(jié)

8、構(gòu)。如表4-1所示,JUnit提供了多個(gè)assert()方法,這些方法包含在 junit.framework.TestCase 類中。表4-1 JUnit 中的斷言方法功能描述assertEquals判斷給定兩對(duì)象的值是否相等assertNull斷言給定對(duì)象是否為nullassertNotNull斷言給定對(duì)象是否不為nullassertSame判斷給定兩對(duì)象是否指同一對(duì)象assertNotSame判斷給定兩對(duì)象是否不是指同一對(duì)象assertTrue斷言給定的布爾條件是否為真assertFalse斷言給定的布爾條件是否為假fail測(cè)試失敗斷言失敗時(shí),將終止測(cè)試方法,并引發(fā) AssertionFa

9、iledError添加JUnit支持無(wú)論是Eclipse還是MyEclipse者B自帶有JUnit ,我們只需添加 JUnit支持即可, 想了解更多關(guān)于JUnit請(qǐng)參考官方網(wǎng)站| HYPERLINK |。下面我們介紹如何在MyEclipse 中添力口 JUnit 支持。1、在Package Explorer中選中要添加 JUnit支持的項(xiàng)目,點(diǎn)擊右鍵。店 F白&蛤e Eplorer1=5 B T| VserLvginTst+ =+. EOptn in Ht WindowOpen Type HierarchyShow InF4Alt+Shift+tf Ctrl+CCtrl+VDAit+Shi t

10、+S 至 CopyCopy Sualifi ed NameX BaleteBuild FathSource圖2-1選中項(xiàng)目,點(diǎn)擊右鍵2、選擇 Build Path,然后再選擇 Add Liraries PasteM DeleteCtrl+VDelatemethod, is called irherBuild FathSourceAlt+Shi ft+S Link Source.幅:Kew Source Foldr.Re factorAit+ShiH+T ? Use as Source Felderno Add Eiclerikal Archives.x , Impart.:E3jart.圖 2

11、-2 Add Libraries3、選擇JUnit ,然后點(diǎn)擊Next按鈕。Add LibraryAdd Library回區(qū)Select Lh/ libr皿y I。 &dd.Jhil$ys t ea Li br 玳XMaven Mariaged Depemdenci exMMjlipia: .Libraiis.Flnin Dpndanci sTapestry Framework (plugin default)User LibraryWIT EAR Libr ar i es (MyEclipsc inccMa.t ible)VfTP JSF Li br li- i a e flyEclipie

12、 i no wp 3 & schoolId 5) / 語(yǔ)句塊2return result;上面getClassInfo 方法的流程圖為:圖2-8例子流程圖A、B、C、Do為了說(shuō)明簡(jiǎn)略,分別對(duì)各個(gè)判斷的取真、取假分支編號(hào)為語(yǔ)句覆蓋語(yǔ)句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)試程序,使得每一條可執(zhí)行語(yǔ)句至少執(zhí)行一次。根據(jù)概念,為了對(duì)上面的函數(shù)進(jìn)行語(yǔ)句覆蓋,只要設(shè)計(jì)一個(gè)測(cè)試用例就可以把三個(gè)執(zhí)行語(yǔ)句塊中的語(yǔ)句覆蓋。針對(duì)程序的判定語(yǔ)句,在入口處設(shè)計(jì)測(cè)試用例。全測(cè)試用例輸入為:classId=4 、gradeId=5、schoolId=5畬程序執(zhí)行的路徑是:AC如果程序只運(yùn)行上面測(cè)試用例, 可以看到模塊中的所

13、有語(yǔ)句都被執(zhí)行了,但不能檢查判斷邏輯是否有問(wèn)題,例如在第一個(gè)判斷中錯(cuò)誤的把 &數(shù)寫(xiě)成| ,則上面的測(cè)試用例 仍可以覆蓋所有的執(zhí)行語(yǔ)句。可以說(shuō)語(yǔ)句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。判定覆蓋設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行所測(cè)程序,使程序中每個(gè)判斷的取真分支和取假分支至 少執(zhí)行一次;根據(jù)上面的定義,對(duì)于上面的程序,如果設(shè)計(jì)兩個(gè)測(cè)試用例則可以滿足條 件覆蓋的要求。測(cè)試用例的輸入為:classId=4 、gradeId=5、schoolId=5classId=2 、gradeId=5、schoolId=5上面的兩個(gè)測(cè)試用例雖然能夠滿足條件覆蓋的要求,但是也不能對(duì)判斷條件進(jìn)行檢查, 例如把第二個(gè)條件 gradeId5錯(cuò)

14、誤的改寫(xiě)gradeId3 取真值為T(mén)1,取假為-T1條件sch0011d5取真值為T(mén)4,取假值為-T4則可以設(shè)計(jì)測(cè)試用例如下:表4-2 條件覆蓋測(cè)試用例覆蓋分支條件取值c1assId=4,gradeId=5,sch0011d=5ACT1、T2、T3、T4c1assId=2,gradeId=5,sch0011d=5BD-T1、T2、-T3、-T4c1assId=4,gradeId=5,sch0011d=15BCT1、-T2、T3、-T4上面的測(cè)試用例不但覆蓋了所有分支的真假兩個(gè)分支,而且覆蓋了判斷中的所有條件的可能值。但是如果設(shè)計(jì)了下面的測(cè)試用例,則雖然滿足了條件覆蓋,但只覆蓋了第二個(gè)條件的取真

15、分支,不滿足分支覆蓋的要求。判定一條件覆蓋設(shè)計(jì)足夠多的測(cè)試用例, 運(yùn)行所測(cè)試程序,是程序中每個(gè)判斷的每個(gè)條件的所有可能取值至少執(zhí)行一次, 并且每個(gè)可能的判斷結(jié)果也至少執(zhí)行一次,換句話說(shuō),即要求各個(gè)判斷的所有可能條件取值組合至少執(zhí)行一次。根據(jù)定義只需設(shè)計(jì)兩個(gè)測(cè)試用例便可以覆蓋8個(gè)條件值及4個(gè)判斷分支。表4-3 判定-條件覆蓋測(cè)試用例覆蓋分支條件取值c1assId=4,gradeId=6,sch0011d=5ACT1、T2、T3、T4c1assId=2,gradeId=5,sch0011d=15BD-T1、-T2、-T3、-T4判定條件覆蓋從表面來(lái)看,它測(cè)試了所有條件的取值,但是實(shí)際上某些條件掩蓋

16、了另一些條件。例如對(duì)于條件表達(dá)式( classId3 ) & (sch0011d3 )為假則一般的編譯器不在判斷是否在 schoo1Id5 )來(lái)說(shuō),若 c1assId=4測(cè)試結(jié)果為真,就認(rèn)為表達(dá)式的結(jié)果為真,這是不再檢查( gradeId5 )條件了。因此 采用判定條件覆蓋,邏輯表達(dá)式中的錯(cuò)誤不一定能夠查出來(lái)了。條件組合測(cè)試設(shè)計(jì)足夠多的測(cè)試用例,運(yùn)行所測(cè)程序,使程序中每個(gè)判斷的所有可能條件取值組合至少執(zhí)行一次?,F(xiàn)在對(duì)例子中的各個(gè)判斷的條件取值組合加以標(biāo)記如下:1、classId3,sch0011d3,sch0011d=10記做T1-T2,第一一個(gè)判斷的取假分支3、c1assId=3,schoo

17、1Id0記做-T1 T2,第一一個(gè)判斷的取假分支4、c1assId=10記做-T1-T2,第一一個(gè)判斷的取假分支5、c1assId=4,gradeId5記做T3 T4,第一一個(gè)判斷的取真分支6、c1assId=4,gradeId5記做-T3 T4,第一一個(gè)判斷的取真分支8、c1assId!=4,gradeId=5記做-T3-T4,第一一個(gè)判斷的取真分支根據(jù)定義取4個(gè)測(cè)試用例,就可以覆蓋上面8種條件取值的組合。測(cè)試用例如卜表:表4-4條件組合測(cè)試測(cè)試用例覆蓋分支條件取值覆蓋組合號(hào)c1assId=4,gradeId=6,sch0011d=5ACT1、T2、T3、T41和5c1assId=4,gra

18、deId=5,sch0011d=15BCT1、-T2、T3、-T42和6c1assId=2,gradeId=6,sch0011d=5BC-T1 、 -T2 、 -T3 、 T43和7c1assId=2,gradeId=6,sch0011d=15BD-T1、-T2、-T3、-T44和8上面的測(cè)試用例覆蓋了所有條件的可能取值的組合,覆蓋了所有判斷的可取分支,但是卻丟失了一條路徑。路徑測(cè)試路徑測(cè)試就是設(shè)計(jì)足夠多的測(cè)試用例,覆蓋被測(cè)試對(duì)象中的所有可能路徑。在上面的測(cè)試用例中修改一個(gè)測(cè)試用例則可對(duì)程序進(jìn)行全部的路徑覆蓋。表4-5 路徑測(cè)試測(cè)試用例覆蓋分支條件取值c1assId=4,gradeId=6,s

19、ch0011d=5ACT1、T2、T3、T4c1assId=4,gradeId=5,sch0011d=15BCT1 、 -T2 、 T3、 -T4c1assId=5,gradeId=4,sch0011d=5ADT1、T2、-T3、-T4c1assId=5,gradeId=6,sch0011d=15BDT1 、 -T2 、 -T3 、 -T4JUnit+EclEmma進(jìn)行覆蓋測(cè)試EclEmma 簡(jiǎn)介現(xiàn)在IT開(kāi)發(fā)人員比以往任何時(shí)候都更加關(guān)注測(cè)試的重要性,沒(méi)有經(jīng)過(guò)良好測(cè)試的 代碼更容易出問(wèn)題。 在極限編程中,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)已經(jīng)被證明是一種有效提高軟件質(zhì)量 的方法。在測(cè)試驅(qū)動(dòng)的開(kāi)發(fā)方式中,軟件工程師在編

20、寫(xiě)功能代碼之前首先編寫(xiě)測(cè)試代碼, 這樣能從最開(kāi)始保證程序代碼的正確性,并且能夠在程序的每次演進(jìn)時(shí)進(jìn)行自動(dòng)的回歸測(cè)試。測(cè)試對(duì)于軟件產(chǎn)品的成敗起著至關(guān)重要的作用,在極限編程領(lǐng)域,甚至有人提議任何未經(jīng)測(cè)試的代碼都應(yīng)該自動(dòng)從發(fā)布的產(chǎn)品中刪除。作者并不確信這個(gè)觀點(diǎn)是正確 的,但是測(cè)試本身的質(zhì)量確實(shí)是一個(gè)需要高度關(guān)注的問(wèn)題。測(cè)試的覆蓋率是測(cè)試質(zhì)量的一個(gè)重要指標(biāo),我們需要工具來(lái)幫助我們進(jìn)行對(duì)軟件測(cè)試覆蓋的考察。EclEmma就是這樣一個(gè)能幫助開(kāi)發(fā)人員考察測(cè)試覆蓋率的優(yōu)秀的Eclipse 開(kāi)源插件。EclEmma在覆蓋測(cè)試領(lǐng)域是如此的優(yōu)秀,以致于它在過(guò)去不久的2006年成為了EclipseCommunityA

21、wardsWinners 決賽選手。雖然最后 EclipseCheckstylePlugin 取得 了 BestOpenSourceEclipse-basedDevelopertool 的稱號(hào),但我們也可以由此看到 EclEmma對(duì)開(kāi)發(fā)人員的幫助是巨大的(EclipseCommunityAward的具體信息可以參閱參 考資源)。提到EclEmma首先就要說(shuō)到著名的Java覆蓋測(cè)試工具 Emma Emma是一個(gè)在SourceForge上進(jìn)行的開(kāi)源項(xiàng)目(參閱參考資源)。從某種程度上說(shuō),EclEmma可以看作是Emma勺一個(gè)圖形界面。在本文的參考文獻(xiàn)中,可以看到專門(mén)講述使用 Emma勺技術(shù) 文章。E

22、mmam乍者開(kāi)發(fā)Emm之初,程序員已經(jīng)有了各種各樣優(yōu)秀的開(kāi)源Java開(kāi)發(fā)工具。舉例來(lái)說(shuō),我們有優(yōu)秀的集成開(kāi)發(fā)環(huán)境Eclipse,有開(kāi)源的JDK,有單元測(cè)試工具JUnit ,有Ant這樣的項(xiàng)目管理工具,還可以用CVS或SubVersion來(lái)進(jìn)行源代碼版本的維護(hù)。當(dāng)時(shí)看來(lái),也許唯一缺少的就是一個(gè)開(kāi)源的覆蓋測(cè)試工具了。Emma就是為了填補(bǔ)這項(xiàng)空白而生的。現(xiàn)在的情況已經(jīng)和Emm典生的時(shí)候不一樣的。時(shí)至今日,已經(jīng)有了不少的覆蓋測(cè)試工具。例如Coverlipse 是一個(gè)基于 Eclipse 的覆蓋測(cè)試插件。其他還有Cobertura、Quilt和JCoverage等。但是Emm具有一些非常優(yōu)秀的特性使得它

23、更適合 被廣泛的使用。和 Coverlipse 等工具比起來(lái),Emmall開(kāi)源的,同時(shí)它對(duì)應(yīng)用程序執(zhí)行 速度的影響非常小。EdEmma的出現(xiàn)彌補(bǔ)了 Emm擁戶一個(gè)大的遺憾缺乏圖形界面以及對(duì)集成開(kāi)發(fā)環(huán)境的支持。將 Eclipse和Emm這兩個(gè)在各自領(lǐng)域最為優(yōu)秀的工具結(jié)合起來(lái),這就是EclEmma為我們提供的。接下來(lái),一起看看EclEmma為開(kāi)發(fā)人員提供了什么。4.4.2添力口 EclEmma支持下載EclEmma壓在官方網(wǎng)站 I HYPERLINK /projects/eclemma/ /projects/eclemma/縮包。儲(chǔ)苴&mmL 4. 3. tip 1WinKAK ZIF壓縮立忤F7

24、28 KB:圖2-9 EclEmma壓縮包解壓eclemma-143.zip 文件,得到plugins 文件夾和features文件夾。features圖2-10 解壓ZIP文件將plugins 里面所有jar文件復(fù)制到 Myeclipse 的eclipseplugins 目錄下;將features 里面文件夾復(fù)制到eclipsefeatures 目錄下。運(yùn)行MyEclipse (如果已經(jīng)運(yùn)行,請(qǐng)重啟 MyEclipse ),即可集成 EclEmma成功。4.4.2生成測(cè)試覆蓋率報(bào)告擊3Cover age Confi guraliomw.TeamCompare With圖 2-11 Cover

25、age As運(yùn)行后覆蓋率的結(jié)果。日 Console 小 JUnit Coverige JUnitDemoTest (201Q-6-11 IT.32.22)Element .CoverageCove.Tot.-tJlilTFLogid22.3 %23103It 0 src22.3 X23103- 田 com. slrj. dean, biz22.3 %23103J JVni tDemc. java iuo.o 苒77-Q JUni tDemo100 0 %77總ddNu/Hi#, int)100.0 需44-山 JlfnitDemoTfcst. java100 0 %1616E G JUni t

26、DemoTest 100.0 %1516Q twvtAd 面5。 100 0 %B6Jj UserLogin. javaJ I VserLogiinest. java0.0口73。,口 得07圖2-12運(yùn)行結(jié)果備 在Coverage視圖中,點(diǎn)擊項(xiàng)目名一 右鍵 一 選擇Export Report 。日 ConsoleJUnit ai CovsrJUnitEemoTest HO-ET】17: 32 22Elen ent 上CoverageCovt. . . Tot .一 gQTPLogiiknn n 嗎L23103S0 srcOpenF31I23103-icor1 玲小叱rtri+rr”1031-

27、 PiaT7Import Session.,弘T71b3L44r i Export Report.,L1616-身 RefreshF5。LIS16K36i+ jrroper tiesAitTEiiTerL073+i JJ UserLcginTesl. javi-0.0L07圖 2-13 選擇 Export ReportFormat選擇默認(rèn)的HTML files , Destination填寫(xiě)為生成報(bào)告的路徑,然后點(diǎn)擊Finish 。圖2-14 選擇目標(biāo)文件布 系統(tǒng)會(huì)自動(dòng)生成報(bào)表文件,如圖2-15 ;運(yùn)行QTPLogin_JUnitDemo.html文件,點(diǎn)擊_JVnitDe.HTFi1:. I

28、 c c m ant用亂照照鏈接,會(huì)看到詳細(xì)覆蓋率報(bào)告,如圖 2-17。fil5圖2-15報(bào)表文件圖2-16點(diǎn)擊超鏈接圖2-17詳細(xì)覆蓋率報(bào)告作業(yè)、簡(jiǎn)答題1、使用JUnit測(cè)試下面的類/ author 楊硯 */public class DateUtil /*判斷一個(gè)日期字符串是否合法,日期格式為xxxx -xx-xx* param dateString輸入需要判斷的日期字符串* return true:合法 false: 不合法*/public boolean validate(String dateString) /通過(guò)正則表達(dá)式首先判斷日期格式是否符合x(chóng)xxx-xx-xxPattern

29、p = Pattern. compile ( d4+Hd1,2+Hd1,2+” Matcher m = p.matcher(dateString);*DateUtil.java*(c) Copyright 2009 YangYan*所屬工程名Test(事例工程)功能概要日期工具類作者楊硯*/package mon;import java.util.regex.Matcher;import java.util.regex.Pattern;/*日期工具類);*if (!m.matches() return false ;) /得到年月日String array = dateString.split(-);int year = Integer.valueOf (array0);int month = Integer. valueOf (array1);int day = Integer. valueOf (array2);if (month 12) return false ;)/聲明全年每月最多天數(shù),其中2月暫時(shí)設(shè)置為-1 ,由后面代碼為2月賦值;索引位置0設(shè)置為0,因?yàn)闆](méi)有0月份int monthLengths =new int 0, 31,-1, 31,30, 31, 30, 31,31,30,31,30, 31 );if ( this .isLeapYear(yea

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論