昨天我們公司的3M team 的新人們?cè)诟舯诘霓k公室KT, 身為新人的我也跑過(guò)去,一看在講JUnit,聽(tīng)了一會(huì)兒,
講了很多Assert云云的東西,我想到了一點(diǎn),為什么不先說(shuō)說(shuō)為什么要JUnit,否則我想任何人都在會(huì)和我一開(kāi)始學(xué)Junit時(shí)候一樣,認(rèn)為不霄一顧,想著
總想著這些東西,我用equals,print的組合都能實(shí)現(xiàn)的,更可以嵌在代碼本身,何必又獨(dú)立出來(lái)。
到這里大家知道我想說(shuō)什么,我想說(shuō)的是TDD的重要性。產(chǎn)生于XP的TDD,呵呵,(不知道我們敏捷開(kāi)發(fā)組的同僚們用不用),這個(gè)TDD的思想是這樣的
我們不應(yīng)該完成開(kāi)發(fā)之后再去寫(xiě)測(cè)試,這通常只是馬后炮,測(cè)試的本質(zhì)上相當(dāng)于設(shè)計(jì)文檔,而不是花大量的時(shí)間去擺弄一個(gè)復(fù)雜的圖形化工具,
你要直接在代碼里擬畫(huà)一個(gè)類(lèi)。開(kāi)始時(shí)候先為一些小功能模塊編寫(xiě)測(cè)試。很多情況下,測(cè)試不能編譯,因?yàn)轭?lèi)本身不存在。
所以我們要做的就是用最少量的代碼完成這個(gè)類(lèi),以便通過(guò)測(cè)試,并增加更多的測(cè)試。這里說(shuō)一下,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ò)難度。
(回歸讓我想到了回溯的算法,嘿嘿,大學(xué)的噩夢(mèng))
于是測(cè)試框架來(lái)了,--JUnit,衍生到XUnit,請(qǐng)開(kāi)始使用他們巴。那位寫(xiě)Taconite的Ryan Asleson說(shuō):測(cè)試會(huì)上癮的,一開(kāi)始接觸JUnit的人都心存疑慮
但是最后都會(huì)愛(ài)上他們。因?yàn)楫?dāng)你發(fā)現(xiàn)增加新的特性只需要幾分鐘的測(cè)試過(guò)程的時(shí)候,你就會(huì)意識(shí)到今天我們所說(shuō)的。
最后說(shuō)一下JsUnit,據(jù)我看用的人很少,說(shuō)白了是Junit的JS版本,自然也是RTF(Regression Testing Framework)的東東,,很多用法都差不多,不過(guò)它是基于函數(shù)的,不是方法哦
地址www.edwardh.com/jsunit,弱弱的問(wèn)一下,有人用這個(gè)來(lái)測(cè)試ajax嗎?嘿嘿!
明天又要去看可惡的BPM文檔了。