您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
Junit--Junit In Action 筆記
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/7/8 11:23:18 ] 推薦標(biāo)簽:

4.1.4 使得重構(gòu)可行
                沒(méi)有單元測(cè)試的話,要證明重構(gòu)是可行的將會(huì)是一件很困難的事,因?yàn)槟憧偸强赡軗p壞一些東西.為什么要花好幾個(gè)
小時(shí)的時(shí)間只是為了改進(jìn)實(shí)現(xiàn)設(shè)計(jì),改變一個(gè)變量的名字諸如此類的事情呢?單元測(cè)試能提供一個(gè)安全網(wǎng),它能為你提供重構(gòu)的勇氣.

4.1.5  改進(jìn)實(shí)現(xiàn)設(shè)計(jì)
                單元測(cè)試是客戶要進(jìn)行的代碼測(cè)試的第一步.它們要求被測(cè)試的API是很靈活的,而且在孤立的狀態(tài)下也是能進(jìn)行
單元測(cè)試的.你通常需要重寫你的代碼來(lái)使它能進(jìn)行單元測(cè)試.

4.1.6 當(dāng)開發(fā)者文檔來(lái)使用.

4.1.7 非常有趣
                單元測(cè)試很容易讓人上癮.一旦你迷上了Junit綠色狀態(tài)條,離開它會(huì)變得很困難.它給你帶來(lái)了思想上的安寧.
剛開始的時(shí)候可能你會(huì)有所懷疑,但是一旦你迷上了測(cè)試,那么寫代碼而不寫測(cè)試是會(huì)變成一件不可思議的事.

4.2 不同種類的測(cè)試
圖4.2 大致地勾勒出了現(xiàn)在軟件測(cè)試地五種類型,有其他劃分軟件測(cè)試地種類的方法.

4.2.1 軟件測(cè)試的4種類型
我們已經(jīng)提到郭了單元測(cè)試所關(guān)注的是每一個(gè)不同的工作單元.但是當(dāng)幾個(gè)不同的工作單元合并到一個(gè)工作流中的
時(shí)候,測(cè)試此時(shí)將要發(fā)生的事情會(huì)怎么樣呢?工作流的后結(jié)果會(huì)是你所期待的嗎?應(yīng)用程序能夠滿足所有人的需要嗎?
以上每一個(gè)問(wèn)題將會(huì)由一個(gè)不同的軟件測(cè)試類型來(lái)回答.針對(duì)討論的問(wèn)題,我們可以將軟件測(cè)試分成四類:
                集成測(cè)試
                功能測(cè)試
                壓力/負(fù)荷測(cè)試
                驗(yàn)收測(cè)試

 

集成測(cè)試
                單個(gè)的單元測(cè)試是一個(gè)很重要的質(zhì)量控制手段,但是當(dāng)幾個(gè)不同的工作單元合并到一個(gè)工作流中的時(shí)候,
將會(huì)發(fā)生什么事情呢?一旦你對(duì)一個(gè)類創(chuàng)建了一個(gè)測(cè)試并且已經(jīng)執(zhí)行了,下一步是關(guān)注其他方法和其他服務(wù).檢查組件之間的相互影響,這是進(jìn)行集成測(cè)試.
                因?yàn)榭赡苣阆胍傻臇|西有很多,集成這個(gè)詞在不同的環(huán)境下代表了不同的事物.一些環(huán)境在表4.1中給出了.

功能測(cè)試
                在對(duì)象之間的測(cè)試交互作用是很重要的.但是結(jié)果是你想要的那個(gè)嗎/
功能測(cè)試在公共API的邊界處的代碼.通常情況下,這等于測(cè)試應(yīng)用程序用例.
功能測(cè)試通?偸呛图蓽y(cè)試結(jié)合在一塊的.

壓力/負(fù)荷測(cè)試
                應(yīng)用程序的功能能夠正確執(zhí)行是很重要的,但是當(dāng)多個(gè)用戶同時(shí)執(zhí)行時(shí)的效果又會(huì)如何呢?大多數(shù)壓力測(cè)試
檢驗(yàn)應(yīng)用程序是否能在短時(shí)間內(nèi)響應(yīng)大量的用戶請(qǐng)求.通常,這是由一些特定的軟件來(lái)執(zhí)行.
比如:JMeter(http://jakarta.apache.org/jmeter).能夠自動(dòng)地發(fā)送設(shè)定好的請(qǐng)求以及跟蹤應(yīng)用程序的響應(yīng)時(shí)間.通常請(qǐng)求是否被
正確的執(zhí)行是不被測(cè)試的.
                壓力測(cè)試通常在一個(gè)單獨(dú)的環(huán)境中進(jìn)行.這種測(cè)試環(huán)境往往具有比典型的開發(fā)環(huán)境更多的控制.它必須跟運(yùn)行的環(huán)境盡量相似.如果兩個(gè)環(huán)境很不一樣的話,測(cè)試也沒(méi)有意義了.
                其它類型的性能測(cè)試可以在開發(fā)環(huán)境下執(zhí)行.
從測(cè)試的角度看,用profiler能夠讓你先知先覺(jué).幫助你在真正的測(cè)試之前發(fā)現(xiàn)一些潛在的問(wèn)題.首先你必須能夠證明一個(gè)特定的瓶頸存在,然后你必須能夠證明這個(gè)瓶頸已經(jīng)被消除了.在兩種情況下,profiler都是重要的工具.
                單元測(cè)試也可以幫助你把一個(gè)應(yīng)用程序分割成一個(gè)個(gè)的自然的部分.一些Junit擴(kuò)展,比如JunitPerf能構(gòu)幫助你建立一套跟你的單元測(cè)試相匹配的性能測(cè)試.你可以斷言一個(gè)重要方法不能花太長(zhǎng)的時(shí)間,作為性能單元測(cè)試的一部分你還可以指定一段時(shí)間作為執(zhí)行的上限.當(dāng)應(yīng)用程序并重構(gòu),如果有什么變化影響到你的話,這些測(cè)試會(huì)向你報(bào)警.
驗(yàn)收測(cè)試
                應(yīng)用程序能夠運(yùn)行流暢是很重要的,但是終一個(gè)問(wèn)題是:這個(gè)應(yīng)用程序滿足了用戶的要求了嗎?驗(yàn)收測(cè)試是這方面的測(cè)試.這些操作通常直接由用戶或者用戶的代理人來(lái)進(jìn)行.驗(yàn)收測(cè)試是確保應(yīng)用程序已經(jīng)滿足了用戶提出的任何要求.
驗(yàn)收測(cè)試是所有其他測(cè)試的超集.

4.2.2 單元測(cè)試的3種類型
               本書主要內(nèi)容是通過(guò)程序進(jìn)行自動(dòng)單元測(cè)試.當(dāng)我們使用單元測(cè)試術(shù)語(yǔ)的時(shí)候,主要關(guān)注的是從內(nèi)部測(cè)試代碼.這種行為不可避免的和編寫代碼相互聯(lián)系并且同時(shí)發(fā)生.單元測(cè)試能夠確保你的應(yīng)用程序在一開始處在測(cè)試中.
                當(dāng)然,你的應(yīng)用程序應(yīng)該能夠經(jīng)受住其他各種軟件測(cè)試形式.從單元測(cè)試開始,以驗(yàn)收測(cè)試結(jié)束.前面的章節(jié)介紹了對(duì)你的應(yīng)用程序應(yīng)當(dāng)做的其他類型的測(cè)試.
                許多應(yīng)用程序都被分成許多的子系統(tǒng).作為一個(gè)開發(fā)者,你想確保你的每一個(gè)子系統(tǒng)都能夠正確地執(zhí)行.當(dāng)你寫代碼時(shí),你的第一個(gè)測(cè)試大概是單元測(cè)試.當(dāng)你寫了越來(lái)越多的測(cè)試和越來(lái)越多的代碼,你會(huì)發(fā)現(xiàn),你需要開始添加集成和功能單元測(cè)試.在任何時(shí)刻,你都可能正在埋頭于邏輯單元測(cè)試,集成測(cè)試或者是功能測(cè)試.


4.3 判斷測(cè)試質(zhì)量

4.3.1 衡量測(cè)試覆蓋面
                一種衡量方法是數(shù)一下你的測(cè)試中用到了多少方法.這不會(huì)告訴你你是否在做正確的事情,但它能告訴你是否有
測(cè)試.
                沒(méi)有單元測(cè)試的話,你只能依靠應(yīng)用程序的公共API方法來(lái)寫測(cè)試.因?yàn)槟悴恍枰屑?xì)研究應(yīng)用程序內(nèi)部并以此來(lái)創(chuàng)造測(cè)試,這些被成為黑盒測(cè)試,圖
               單元測(cè)試的創(chuàng)建依賴于對(duì)一個(gè)方法實(shí)現(xiàn)的了解.如果在這個(gè)方法中存在一個(gè)條件分支,你能創(chuàng)建兩個(gè)單元測(cè)試,每個(gè)分支各一個(gè).你創(chuàng)建這樣的測(cè)試需要仔細(xì)研究那個(gè)方法,這是被稱為白盒測(cè)試.
有了白盒單元測(cè)試,要達(dá)到一個(gè)更高的測(cè)試水平變得簡(jiǎn)單一些,主要因?yàn)槟阋呀?jīng)訪問(wèn)了更多的方法而且因?yàn)槟隳芸刂泼總(gè)方法的輸入以及被調(diào)用的次級(jí)對(duì)象的行為(通過(guò)使用stub或者mockbojects你將會(huì)在后面的章節(jié)看到怎么做),白盒測(cè)試能夠測(cè)試到包的保護(hù)方法和公有方法.

4.3.2 產(chǎn)生測(cè)試覆蓋情況報(bào)告
                對(duì)于Junit,可以找到一些工具幫你分析你的應(yīng)用程序并且提供一個(gè)關(guān)于你的應(yīng)用程序測(cè)試覆蓋情況的確切報(bào)告.圖4.7
給出了這樣的一個(gè)報(bào)告,這個(gè)報(bào)告是由Clover(http://www.coretex.net/clover)工具創(chuàng)建的.
                知道哪些類被進(jìn)行了測(cè)試(DefaultController),知道哪些類還沒(méi)有進(jìn)行測(cè)試,這是重要的信息.但是如果能知道為什么DefaulgController只有94.7%的測(cè)試覆蓋那更好了.幸運(yùn)的是,clover能夠在方法實(shí)現(xiàn)層次深入追蹤.
                知道哪些代碼還沒(méi)有進(jìn)行測(cè)試是有好處的.盡管如此,一個(gè)好的測(cè)試工具(比如Clover)應(yīng)該提供歷史報(bào)告來(lái)顯示整個(gè)開發(fā)過(guò)程中的測(cè)試經(jīng)過(guò),也應(yīng)該提供與你喜歡的構(gòu)建系統(tǒng)的集成.它也應(yīng)該有能力來(lái)停止構(gòu)建,如果標(biāo)準(zhǔn)沒(méi)有達(dá)到的話.
                在我們的項(xiàng)目中,我們喜歡進(jìn)行一段開發(fā)迭代之后測(cè)試一下覆蓋百分率.我們調(diào)整構(gòu)建失敗標(biāo)準(zhǔn),以使下一次迭代至少有與前一迭代一樣的覆蓋百分率.這個(gè)策略確保了我們測(cè)試覆蓋率能穩(wěn)步上升.
                雖然我們所展示的報(bào)告有幫助也很有趣,但是他們并不能告訴你你的測(cè)試有多么的好. 他們只會(huì)告訴你哪個(gè)方法已經(jīng)被測(cè)試過(guò)了, 哪個(gè)還沒(méi)有.算你的測(cè)試是完全錯(cuò)誤的并且沒(méi)有測(cè)試任何東西,你的報(bào)告仍然還是一樣的!確保測(cè)試的質(zhì)量是很困難的,測(cè)試工具能提供一定的幫助.Jester 是通過(guò)對(duì)被測(cè)試代碼進(jìn)行隨意的變動(dòng)來(lái)工作的;它會(huì)驗(yàn)證你的代碼在這種情況下是否依然能通過(guò).如果他們通過(guò)了, 那意味著測(cè)試還是夠好.Jester通過(guò)多次反復(fù)來(lái)做這件事,它還會(huì)產(chǎn)生一個(gè)報(bào)告來(lái)揭示測(cè)試的質(zhì)量.
                記住的測(cè)試覆蓋并不能保證你的應(yīng)用程序得到了的測(cè)試,這一點(diǎn)是很重要的.你的測(cè)試覆蓋只是和你的測(cè)試一樣好!如果你的測(cè)試構(gòu)想很糟糕,那么你的應(yīng)用程序得不到足夠的測(cè)試,不管你進(jìn)行了多少測(cè)試.

4.3.3 測(cè)試交互
                如果我們應(yīng)用白盒測(cè)試能達(dá)到更高的測(cè)試覆蓋,而且我們能夠生成幾個(gè)精彩的報(bào)告來(lái)證明這一點(diǎn),那么我們還需要進(jìn)行黑盒測(cè)試嗎?
                如果你想要完全的測(cè)試你的應(yīng)用程序,包括運(yùn)行對(duì)象是如何相互影響的,你需要把黑盒子測(cè)試作為整個(gè)測(cè)試的一部分.
4.4 測(cè)試驅(qū)動(dòng)開發(fā)
                在第三章中,你設(shè)計(jì)了一個(gè)應(yīng)用程序,而且快速地創(chuàng)建了幾個(gè)測(cè)試來(lái)驗(yàn)證你的設(shè)計(jì).當(dāng)你創(chuàng)建這些測(cè)試的時(shí)候,這些測(cè)試幫助改善了初的設(shè)計(jì).隨著你創(chuàng)建更多的單元測(cè)試,正反饋的良性循環(huán)會(huì)鼓勵(lì)你盡早地編寫單元測(cè)試.很快,當(dāng)你設(shè)計(jì)實(shí)現(xiàn)的時(shí)候,要想知道你將要如何測(cè)試一個(gè)類變得自然而然.在這個(gè)方法論下,越來(lái)越多的開發(fā)者正在從利于測(cè)試的設(shè)計(jì)躍遷到測(cè)試驅(qū)動(dòng)開發(fā).

上一頁(yè)1234567下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd