您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
從JUnit到Rspec的嘗試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/4/11 13:27:28 ] 推薦標(biāo)簽:

  如今,各種測(cè)試框架層出不窮,每一種框架都有其獨(dú)特性以及各自的優(yōu)勢(shì)。由于工作的原因,分別先后接觸了JUnit以及Respec兩套測(cè)試框架,雖然研究的不深,但也這兩套框架談一談自己的理解。重點(diǎn)主要針對(duì)于Rspec框架。

  JUnit介紹

  眾所周知,JUnit是一個(gè)用Java編寫而成的單元測(cè)試框架。利用JUnit,我們可以通過編寫簡(jiǎn)單的測(cè)試代碼,方便的進(jìn)行白盒測(cè)試,也可以說:在了解了被測(cè)代碼如何工作的前提下,對(duì)其內(nèi)部結(jié)構(gòu)的正確性進(jìn)行自動(dòng)化的測(cè)試。在JUnit的官網(wǎng)上,我們可以看到有關(guān)JUnit更為正統(tǒng)的釋義——JUnit是一個(gè)開放源代碼的簡(jiǎn)單框架,用來編寫和運(yùn)行可重復(fù)的測(cè)試(也被稱為回歸測(cè)試)。它是致力于單元測(cè)試框架的XUnit架構(gòu)的一種實(shí)現(xiàn)。其中包含了:

  1.用于檢測(cè)預(yù)期結(jié)果的Assertions

  2.用于共享測(cè)試數(shù)據(jù)的Test Fixtures

  3.用于運(yùn)行測(cè)試的Test Runners

  在使用JUnit時(shí),其主要投放場(chǎng)景是:a.與開發(fā)人員約定好要測(cè)的內(nèi)部方法、或是對(duì)外接口(方法名稱、參數(shù)個(gè)數(shù)、參數(shù)類型等),兩邊同時(shí)開工,開發(fā)提測(cè),運(yùn)行JUnit測(cè)試代碼。b.根據(jù)開發(fā)已寫好的代碼,編寫測(cè)試代碼,校驗(yàn)其正確性。這兩種情景都很常見,具體采用哪種,視時(shí)間寬松程度而定。

  由于JUnit在很多平臺(tái)工具上的集成(ANT,Maven,Eclipse,IntelliJ IDEA等),以及配有大量的插件(dbUnit,xmlUnit等),以及其易用性,使其仍是當(dāng)今單元測(cè)試框架的。

  Rspec介紹

  前不久,由于需要對(duì)Kelude平臺(tái)建立起一套測(cè)試體系,于是便研究起來Respec這一BDD測(cè)試框架。說起B(yǎng)DD,我想大家都不陌生,其英文全稱為Behaviour Driven Development,即行為驅(qū)動(dòng)開發(fā)。Respec是Ruby社區(qū)中為流行的行為驅(qū)動(dòng)測(cè)試框架。關(guān)于BDD更詳細(xì)的介紹,大家可以參考http://qa.taobao.com/?p=11630這篇文章,這里不再過多介紹。

  要想真正用好Respec,要遵循其背后的測(cè)試思想——測(cè)試先行。這也是與JUnit等單元測(cè)試框架大的不同之處。所謂測(cè)試先行,是要求我們,在開發(fā)人員編碼工作之前,先寫好測(cè)試用例,然后由測(cè)試來推動(dòng)開發(fā)工作。通俗解釋為:在設(shè)計(jì)實(shí)現(xiàn)一個(gè)功能之前,先考慮好如何來測(cè)試這個(gè)功能,測(cè)試的代碼完成后,再編寫功能實(shí)現(xiàn)代碼,并且使得該測(cè)試用例運(yùn)行通過,即完成了系統(tǒng)的一個(gè)功能模塊。這與通常的JUnit使用場(chǎng)景背道而馳。

  如果在接觸Respec的初期,要求編寫Respec測(cè)試用例,和編寫功能代碼的人員角色分開,我想這對(duì)于開發(fā)人員來說,應(yīng)該是非常被動(dòng)和痛苦的,同時(shí)也會(huì)很大程度上限制開發(fā)人員的創(chuàng)造性。因?yàn)楣δ艽a的編寫目的由原來的實(shí)現(xiàn)功能,變?yōu)榱巳缃竦耐ㄟ^測(cè)試用例,無論如何對(duì)于開發(fā)人員都是一種挑戰(zhàn)。因此,初期嘗試Respec階段,我建議測(cè)試用例和功能代碼的編寫都由一個(gè)人來承擔(dān)。也是說,自己根據(jù)業(yè)務(wù)需求,先寫好Respec測(cè)試用例,然后再編寫功能代碼,而編寫功能代碼的目的是為了通過測(cè)試。這樣做的好處,不僅可以大程度的理解Resepc背后的思想,同時(shí)也會(huì)逼迫開發(fā)人員為了滿足易測(cè)性,從而寫出簡(jiǎn)潔、高質(zhì)量的代碼。這些優(yōu)點(diǎn),只有真正嘗試過Respec后,才會(huì)深有感觸。

  Respec在Rails框架中,不僅能針對(duì)MVC的Controller層、Model層、View層,進(jìn)行分層測(cè)試,同時(shí)也可以針對(duì)例如路由等其它層面進(jìn)行測(cè)試,可以說是功能非常全面。

  Rspec初體驗(yàn)

  后,針對(duì)于Rails應(yīng)用搭建Respec環(huán)境、以及一些常用的插件做一下簡(jiǎn)短介紹:

  1.假設(shè)Ruby、Rails環(huán)境均已安裝完成,安裝Rspec插件

  gem install rspec

  2. 安裝測(cè)試數(shù)據(jù)準(zhǔn)備工具Factory Girl

  gem install factory_girl_rails

  3. 安裝測(cè)試腳本對(duì)代碼覆蓋率的檢測(cè)工具RCov

  gem install rcov

  以上三步安裝了進(jìn)行Respec測(cè)試常用的幾個(gè)工具。

  所有測(cè)試代碼放在spec目錄下,并且與功能代碼的目錄結(jié)構(gòu)相對(duì)應(yīng)。

  下面附上一個(gè)Rspec代碼文件:

  如上圖:

  let 方法主要針對(duì)數(shù)據(jù)準(zhǔn)備聲明

  Factory :XXX 從FactoryGirl 插件中取出預(yù)先準(zhǔn)備好的數(shù)據(jù)

  describe 對(duì)應(yīng)于一個(gè)測(cè)試集

  it 對(duì)應(yīng)于一個(gè)測(cè)試用例

  每個(gè)測(cè)試集和測(cè)試用例都配有各自的描述信息(測(cè)試集名、用例名),這些都是寫進(jìn)測(cè)試代碼中的,這樣做,不僅增加了代碼的可讀性,同時(shí)在執(zhí)行用例時(shí),一旦用例報(bào)錯(cuò),可以很方便的查看到是對(duì)應(yīng)于哪一部分業(yè)務(wù)規(guī)則的代碼出了問題。在測(cè)試用例中用通用語言把系統(tǒng)的行為描述出來,把測(cè)試代碼作為系統(tǒng)的定義文檔,將系統(tǒng)的設(shè)計(jì)和測(cè)試用例結(jié)合起來,這即是BDD所倡導(dǎo)的。

  當(dāng)想查看測(cè)試用例腳本對(duì)于功能代碼的覆蓋情況時(shí),我們可以使用RCov這個(gè)工具,通過它,不僅可以通過命令行的形式查看到覆蓋率數(shù)據(jù),也可以以HTML網(wǎng)頁(yè)形式查看,非常清晰、具體。

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