您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUnit實施集合
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2013/1/17 14:14:29 ] 推薦標簽:

2.Design by Contract(這句話我沒法翻譯)

Design by Contract本是Bertrand Meyer(Eiffel語言的創(chuàng)始人)開發(fā)的一種設(shè)計技術(shù)。我發(fā)現(xiàn)在JUnit中使用Design by Contract會帶來意想不到的效果。Design by Contract的核心是斷言(assersion)。斷言是一個布爾語句,該語句不能為假,如果為假,則表明出現(xiàn)了一個bug。Design by Contract使用三種斷言:前置條件(pre-conditions)、后置條件(post-conditions)和不變式(invariants)這里不打算詳細討論Design by Contract的細節(jié),而是希望其在測試中能發(fā)揮其作用。

前置條件在執(zhí)行測試之前可以用于判斷是否允許進入測試,即進入測試的條件。如 expectedWheels > 0, myCar != null。后置條件用于在測試執(zhí)行后判斷測試的結(jié)果是否正確。如 expectedWheels==myCar.getWheels()。而不變式在判斷交易(Transaction)的一致性(consistency)方面尤為有用。我希望JUnit可以將Design by Contract作為未來版本的一個增強。


3.Refactoring(這句話我依然沒法翻譯)

Refactoring本來與測試沒有直接的聯(lián)系,而是與軟件熵有關(guān),但既然我們說測試能解決軟件熵問題,我們也必須說出解決之道。(僅僅進行測試只能發(fā)現(xiàn)軟件熵,Refactoring則可解決軟件熵帶來的問題。)軟件熵引出了一個問題:是否需要重新設(shè)計整個軟件的結(jié)構(gòu)?理論上應(yīng)該如此,但現(xiàn)實不允許我們這么做。這或者是由于時間的原因,或者是由于費用的原因。重新設(shè)計整個軟件的結(jié)構(gòu)會給我們帶來短期的痛苦。而不停地給軟件打補丁甚至是補丁的補丁則會給我們帶來長期的痛苦。(不管怎樣,我們總處于水深火熱之中)

Refactoring是一個術(shù)語,用于描述一種技術(shù),利用這種技術(shù)我們可以免于重構(gòu)整個軟件所帶來的短期痛苦。當你refactor時,你并不改變程序的功能,而是改變程序內(nèi)部的結(jié)構(gòu),使其更易理解和使用。如:該變一個方法的名字,將一個成員變量從一個類移到另一個類,將兩個類似方法抽象到父類中。所作的每一個步都很小,然而1-2個小時的Refactoring工作可以使你的程序結(jié)構(gòu)更適合目前的情況。Refactoring有一些規(guī)則:

1> 不要在加入新功能的同時refactor已有的代碼。在這兩者間要有一個清晰的界限。如每天早上1-2個小時的Refactoring,其余時間添加新的功能。

2> 在你開始Refactoring前,和Refactoring后都要保證測試能順利通過。否則Refactoring沒有任何意義。

3> 進行小的Refactoring,大的不是Refactoring了。如果你打算重構(gòu)整個軟件,沒有必要Refactoring了。

只有在添加新功能和調(diào)試bug時才又必要Refactoring。不要等到交付軟件的后關(guān)頭才Refactoring。那樣和打補丁的區(qū)別不大。Refactoring 用在回歸測試中也能顯示其威力。要明白,我不反對打補丁,但要記住打補丁是應(yīng)該后使用的必殺絕招。(打補丁也需要很高的技術(shù),詳情參看網(wǎng)站)

4.IDE對JUnit的支持

目前支持JUnit的Java IDE 包括

IDE 方式 個人評價(1-5,滿分5)
 plug-in 3
 integrated with IDE 4
 support N/A

在IDE中如何使用JUnit,是非常具體的事情。不同的IDE有不同的使用方法。一旦理解了JUnit的本質(zhì),使用起來十分容易了。所以我們不依賴于具體的IDE,而是集中精力講述如何利用JUnit編寫單元測試代碼。心急的人可參看。

5.JUnit簡介

既然我們已經(jīng)對JUnit有了一個大致的了解,我希望能給大家提供一個稍微正式一些的編寫JUnit測試文檔的手冊,明白其中的一些關(guān)鍵術(shù)語和概念。但我要聲明的是這并不是一本完全的手冊,只能認為是一本入門手冊。同其他OpenSource的軟件有同樣的問題,JUnit的文檔并沒有商業(yè)軟件文檔的那種有規(guī)則,簡潔和完全。由開發(fā)人員編寫的文檔總是說不太清楚問題,全整的文檔需要參考"官方"指南,API手冊,郵件討論組的郵件,甚至包括源代碼中及相關(guān)的注釋。

事實上問題并沒有那么復(fù)雜,除非你有非常特別的要求,否則,只需參考本文你可以得到所需的大部分信息。

    安裝

    首先你要獲取JUnit的軟件包,從下載新的軟件包(截至寫作本文時,JUnit的新版本是3.7)。將其在適當?shù)哪夸浵陆獍。這樣在安裝目錄(也是你所選擇的解包的目錄)下你找到一個名為junit.jar的文件。將這個jar文件加入你的CLASSPATH系統(tǒng)變量。(IDE的設(shè)置會有所不同,參看你所喜愛的)JUnit安裝完了。太easy了!

    你一旦安裝完JUnit,有可能想試試我們的Car和testCar類,沒問題,我已經(jīng)運行過了,你得到的結(jié)果應(yīng)該和我列出的結(jié)果類似。(以防新版JUnit使我的文章過時)

    接下來,你可能會先寫測試代碼,再寫工作代碼,或者相反,先寫工作代碼,再寫測試代碼。我更贊成使用前一種方法:先寫測試代碼,再寫工作代碼。因為這樣可以使我們編寫工作代碼時清晰地了解工作類的行為。

    要注意編寫一定能通過的測試代碼(如文中的例子)并沒有任何意義,只有測試代碼能幫助我們發(fā)現(xiàn)bug,測試代碼才有其價值。此外測試代碼還應(yīng)該對工作代碼進行全面的測試。如給方法調(diào)用的參數(shù)傳入空值、錯誤值和正確的值,看看方法的行為是否如你所期望的那樣。

    你現(xiàn)在已經(jīng)知道了編寫測試類的基本步驟:
    1>擴展TestCase類;
    2>覆蓋runTest()方法(可選);
    3>寫一些testXXXXX()方法;

    Fixture

    解下來的問題是,如果你要對一個或若干個的類執(zhí)行多個測試,該怎么辦?JUnit對此有特殊的解決辦法。

    如果需要在一個或若干個的類執(zhí)行多個測試,這些類成為了測試的context。在JUnit中被稱為Fixture(如testCar類中的 myCar 和 expectedWheels )。當你編寫測試代碼時,你會發(fā)現(xiàn)你花費了很多時間配置/初始化相關(guān)測試的Fixture。將配置Fixture的代碼放入測試類的構(gòu)造方法中并不可取,因為我們要求執(zhí)行多個測試,我并不希望某個測試的結(jié)果意外地(如果這是你要求的,那另當別論了)影響其他測試的結(jié)果。通常若干個測試會使用相同的Fixture,而每個測試又各有自己需要改變的地方。

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