您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
JUnit測(cè)試建議
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/25 16:49:22 ] 推薦標(biāo)簽:

        以下是對(duì)JUnit實(shí)踐的一個(gè)很好的總結(jié),信息來(lái)源于一些比較權(quán)威的JUnit書(shū)籍和網(wǎng)上資料。這里集合如下:

        1、每次只對(duì)一個(gè)對(duì)象進(jìn)行UT測(cè)試(unit-test one object at a time)。這樣能使你盡快發(fā)現(xiàn)問(wèn)題,而不被各個(gè)對(duì)象之間的復(fù)雜關(guān)系所迷惑。

        2、給測(cè)試方法起個(gè)好名字(choose meaningful test method names)。應(yīng)該是用形如testXXXYYY(),這樣的格式來(lái)命名你的測(cè)試方法。前綴test是Junit查找測(cè)試方法的依據(jù),XXX應(yīng)該是你測(cè)試的方法名,YYY應(yīng)該是你測(cè)試的狀態(tài)。當(dāng)然如果你只有一種狀態(tài)需要測(cè)試可以直接命名為testXXX()。

        3、明確寫(xiě)出出錯(cuò)原因(explain the failure reason in assert calls)。在使用assertTrue,assertFalse,assertNotNull,assertNull方法時(shí),應(yīng)該將可能的錯(cuò)誤的描述字符串,以第一個(gè)參數(shù)傳入相應(yīng)的方法。這樣你可以迅速的找出出錯(cuò)原因。

        4、一個(gè)UT測(cè)試方法只應(yīng)該測(cè)試一種情況(one unit test equals one testMethod)。一個(gè)方法中的多次測(cè)試,只會(huì)混亂你的測(cè)試目的。

        5、測(cè)試任何可能的錯(cuò)誤(test anything that could possibly fail)。你的測(cè)試代碼不是為了證明你是對(duì)的,而是為了證明你沒(méi)有錯(cuò)。因此對(duì)測(cè)試的范圍要全面,比如邊界值、正常值、錯(cuò)誤值;對(duì)代碼可能出現(xiàn)的問(wèn)題要全面預(yù)測(cè)。

        6、讓你的測(cè)試幫助改善你的代碼(let the test improve the code)。測(cè)試代碼永遠(yuǎn)是我們代碼的第一個(gè)用戶,所以不僅讓他幫組我們發(fā)現(xiàn)Bug,還要幫組我們改善我們的設(shè)計(jì),是有名的測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Test-Driven Development,TDD)。

        7、一樣的包,不同的位置(same package, separate directories)。測(cè)試的代碼和被測(cè)試的代碼應(yīng)該放到不同的文件夾中,建議使用這種目錄 src/java/代碼 src/test/測(cè)試代碼。 這樣可以讓兩份代碼使用一樣的包結(jié)構(gòu),但是放在不同的目錄下。

        8、關(guān)于setup與teardown

                a) 不要用TestCase的構(gòu)造函數(shù)初始化Fixture,而要用setUp()和tearDown()方法。

                b) 在setUp和tearDown中的代碼不應(yīng)該是與測(cè)試方法相關(guān)的,而應(yīng)該是全局相關(guān)的。如:針對(duì)與測(cè)試方法都要用到的數(shù)據(jù)庫(kù)鏈接等等。

                c) 當(dāng)繼承一個(gè)測(cè)試類(lèi)時(shí),記得調(diào)用父類(lèi)的setUp()和tearDown()方法。

        9、不要在mock object中牽扯到業(yè)務(wù)邏輯(don’t write business logic in mock objects)。

        10、只對(duì)可能產(chǎn)生錯(cuò)誤的地方進(jìn)行測(cè)試(only test what can possibly break)。如:一個(gè)類(lèi)中頻繁改動(dòng)的函數(shù)。對(duì)于那些僅僅只含有g(shù)etter/setter的類(lèi),如果是由IDE(如Eclipse)產(chǎn)生的,則可不測(cè);如果是人工寫(xiě),那么好測(cè)試一下。

        11、盡量不要依賴或假定測(cè)試運(yùn)行的順序,因?yàn)镴Unit利用Vector保存測(cè)試方法。所以不同的平臺(tái)會(huì)按不同的順序從Vector中取出測(cè)試方法。

        12、避免編寫(xiě)有副作用的TestCase,你要確信保持你的測(cè)試方法之間是獨(dú)立的。

        13、將測(cè)試代碼和工作代碼放在一起,一邊同步編譯和更新(使用Ant中有支持junit的task)。

        14、確保測(cè)試與時(shí)間無(wú)關(guān),不要依賴使用過(guò)期的數(shù)據(jù)進(jìn)行測(cè)試。導(dǎo)致在隨后的維護(hù)過(guò)程中很難重現(xiàn)測(cè)試。

        15、如果你編寫(xiě)的軟件面向國(guó)際市場(chǎng),編寫(xiě)測(cè)試時(shí)要考慮國(guó)際化的因素。不要僅用母語(yǔ)的Locale進(jìn)行測(cè)試。

        16、盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡(jiǎn)潔。

        17、測(cè)試要盡可能地小,執(zhí)行速度快。

        18、……等待你的高見(jiàn)!

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