大名頂頂?shù)腏Unit是Kent Beck和Erich Gamma編寫的用java語言實(shí)現(xiàn)的單元測試框架。
JUnit3
JUnit3的用法比較簡單,就是實(shí)現(xiàn)繼承框架中TestCase的測試用例(一般實(shí)踐中命名為XxxTest),然后在其中加入以testXxx命名的測試方法。然后就可以用JUnit框架中的Runner運(yùn)行測試。
而且在JUnit的測試中如果要加入初始化方法就把方法命名為setup(),如果要加入清理方法就把方法命名為downDown()。
如果要將幾個測試用例作為一個集合一次運(yùn)行就實(shí)現(xiàn)一個有public static Test suite()方法簽名的方法,在其中創(chuàng)建一個TestSuite實(shí)例,然后調(diào)用方法addTest把一個個測試用例加入到集合中。
JUnit4
JUnit4在3的基礎(chǔ)上融入了JDK1.5的注釋特性,大大得改進(jìn)和強(qiáng)化了JUnit框架。將測試方法由之前的通過繼承TestCase確定測試類和通過命名方法確定測試方法的測試編寫方式轉(zhuǎn)變?yōu)橛勺⑨尨_定這些方面。
常用的注釋:
@Before:初始化方法
@After:清理資源
@Test:測試方法
@BeforeClass:針對所有測試,只執(zhí)行一次,且必須為static void
@AfterClass:針對所有測試,只執(zhí)行一次,且必須為static void
只要有在類中要測試的方法前加入@Test,這個類就是一個測試用例。而加了對應(yīng)注釋的方法就是各個功能方法,比如初始化和清理。
JUnit4相對以前的增強(qiáng)體現(xiàn)在以下的注釋中:
@Test(expected=Exception.class):異常測試,斷言異常必定產(chǎn)生
@Test(timeout=n):要求測試在允許超時時間(n秒)中完成
@Ignore:忽略某個測試方法
@Parameters:提供參數(shù)測試,也就是用一組參數(shù)測試代碼
而且JUint4對ant1.7以下的版本有兼容性問題。
以上講的JUnit用法就是最最常用用法。
有機(jī)會可以接到一個小型商務(wù)平臺的項(xiàng)目,最近就開始做一個平臺的一些基礎(chǔ)組件,比如新聞發(fā)布模塊和用戶管理模塊。開發(fā)團(tuán)隊(duì)只有我和另一個同學(xué),一共兩個人。而我們對XP開發(fā)過程比較有興趣,剛剛好可以進(jìn)行結(jié)對編程和TDD。
開發(fā)已經(jīng)進(jìn)行了一個星期左右,已完成新聞發(fā)表模塊中的新聞管理模塊。因?yàn)橥耆珱]有經(jīng)驗(yàn),而且開發(fā)時間不夠(只能在沒有課的上午或者下午開發(fā)),開發(fā)進(jìn)度很慢。但是自我感覺不錯,因?yàn)轶w驗(yàn)了以前沒有體驗(yàn)過的開發(fā)過程,從中學(xué)到了很多東西。
在整個開發(fā)過程中,我們始終堅(jiān)持“測試先行”原則。首先列出要完成的任務(wù)清單,用JUnit寫出相應(yīng)測試代碼,然后運(yùn)行測試,出錯,偽實(shí)現(xiàn),重構(gòu)。一般都是兩個人,一個人持有鍵盤,寫一個鐘左右的代碼,然后一邊討論一邊寫代碼。在完成了一段代碼之后有種神奇的感覺,好像不知不覺中代碼就被寫出來了,這可能是TDD神奇的地方。先寫出符合需求的測試,接著按照測試來寫代碼,就是這么簡單。
不過完成了新聞發(fā)布模塊之后,經(jīng)過討論,決定下一步完成前臺的UI。對于UI的開發(fā),平時例子學(xué)習(xí)了不少,自己寫的toycode也寫了一些,但是在實(shí)際應(yīng)用開發(fā)中對我們還是比較陌生。一開始準(zhǔn)備用簡單的JSP和Servlet來做前端,但是在前端控制器中代碼實(shí)現(xiàn)有點(diǎn)混亂,現(xiàn)在就卡在UI這里了,最后經(jīng)過討論決定用WebWork作前端控制器。
以前在看K.Back的《解析極限編程》時,看到他把結(jié)對編程描述的很神奇:
結(jié)對程序員:
- 使彼此都專注于任務(wù)
- 一起頭腦風(fēng)暴,討論系統(tǒng)的精化
- 理清思路
- 在搭檔陷入困境時要主動,這樣才能減少挫折
- 使彼此都對團(tuán)隊(duì)的實(shí)踐負(fù)責(zé)
經(jīng)過實(shí)踐之后,就很清楚地體會到k.Back講到的結(jié)對的好處。
五一應(yīng)該還會繼續(xù)完成這個項(xiàng)目,而且是一邊做一邊學(xué)。
摘要: 假期學(xué)完了Servlet和JSP,現(xiàn)在來復(fù)習(xí)一下。
Servlet和JSP,作為JavaEE的重要技術(shù)之一,表現(xiàn)層的核心技術(shù)之一。其中包括了什么,如何使用。
第一部分 技術(shù)背景:
...............................................
(待續(xù)未完)
閱讀全文
這個學(xué)期的學(xué)習(xí)要好好規(guī)劃。盡量提高時間的利用率,讓自己學(xué)習(xí)生活得更加有效率。
學(xué)習(xí)內(nèi)容:
- TDD測試驅(qū)動開發(fā)方法
- 6種類別重構(gòu)手法
- 設(shè)計(jì)模式的完整學(xué)習(xí)(主要是除了12個核心模式之前的11個)
- UML和OOA,OOD
- WebWork
- Spring
- Ioc容器,AOP
- JUnit技巧(結(jié)合TDD的核心概念)
- 敏捷和XP的內(nèi)容
- J2EE核心模式
- Hibernate學(xué)習(xí)
實(shí)踐部分:
- 用Java重寫以前用C++寫過的一個圖書館管理系統(tǒng)(LMS)
- 用Java的XML,JDBC包寫一些toy code
學(xué)習(xí)的內(nèi)容,有優(yōu)先級,越上越高。而實(shí)踐部分盡量在學(xué)期末完成,而在實(shí)踐中先用OO的方法做簡單的初步分析和設(shè)計(jì),然后用TDD,在構(gòu)建過程中使用Ant,Eclipse,CVS,JUnit等工具。因?yàn)檫@個學(xué)期還要考四級,所以時間會比較緊。
每個星期把計(jì)劃寫在一張紙上,然后每天完成計(jì)劃后作一個標(biāo)記。
一天一小步,一星期一中步,一個月就可以踏出一大步。
OOD應(yīng)該遵循的十一個基本原則,摘取自Robert C. Martin的The Principles of OOD一文 http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
類設(shè)計(jì)原則:
-
SRP,單一職責(zé)原則,一個類應(yīng)該有且只有一個改變的理由。
-
OCP,開放封閉原則,你應(yīng)該能夠不用修改原有類就能擴(kuò)展一個類的行為。
-
LSP,Liskov替換原則,派生類要與其基類自相容。
-
DIP,依賴倒置原則,依賴于抽象而不是實(shí)現(xiàn)。
-
ISP,接口隔離原則,客戶只要關(guān)注它們所需的接口。
包內(nèi)聚性原則:
-
REP,重用發(fā)布等價原則,重用的粒度就是發(fā)布的粒度。
-
CCP,共同封閉原則,包中的所有類對于同一類性質(zhì)的變化應(yīng)該是共同封閉的。?
-
CRP,共同重用原則,一個包中的所有類應(yīng)該是共同重用的。
包耦合性原則:
-
ADP,無環(huán)依賴原則,在包的依賴關(guān)系圖中不允許存在環(huán)。
-
SDP,穩(wěn)定依賴原則,朝著穩(wěn)定的方向進(jìn)行依賴。
-
SAP,穩(wěn)定抽象原則,包的抽象程度應(yīng)該和其穩(wěn)定程度一致
我的JAVA之路就是從考SCJP開始。
起源:
一切都是源于CSDN上的SCJP的廣告,那是在國慶長假前幾天看到的。在2006年下半年,學(xué)生考SCJP是優(yōu)惠價450。那時就想著趁著這個時機(jī)考個證來傍身,優(yōu)惠800哦。順便可以開始學(xué)習(xí)JAVA。
開始學(xué)習(xí)JAVA:
然后就在網(wǎng)上買了幾本書,都是很多人都推薦的《Thinking in JAVA 3e》,《Core Java 7e》1,2卷,《Effective Java》。那時還完全不懂,不買Effective JAVA早知道買Java Puzzlers,因?yàn)槠鋵?shí)Puzzlers是Effective的第二版,兩位作者都是就職于Google的JAVA達(dá)人。而另外兩本書用來入門還不錯,兩本書都有大量的代碼例子,看代碼來學(xué)習(xí)也許是最好的學(xué)習(xí)編程的方法了。TIJ這本書講了很多編程技巧和JAVA的一些原理,而CJ這本書講了很多在應(yīng)用方面的技巧,兩本書都很生動很有趣。
以前C++上我花了很大的精力在學(xué)習(xí),一開始接觸電腦就在學(xué)C++,有兩年的C++學(xué)習(xí)時間。所以對JAVA的語法和面向?qū)ο蟾拍钅鼙容^好的適應(yīng)。對C++和JAVA比較直觀的比較就是,JAVA的庫比起C++的標(biāo)準(zhǔn)強(qiáng)大太多太多了,C++只提供了一些常見的數(shù)據(jù)結(jié)構(gòu)和算法,而Java幾乎提供了所有的基礎(chǔ)功能。還有JAVA的API文檔相當(dāng)齊全,對方方面面都講得很詳細(xì),而且有中文化,這相對于學(xué)習(xí)速度有很大提高。
小插曲:
一開始我就計(jì)劃好,用一個半月的時間學(xué)習(xí)JAVA基本的知識,然后用一個月的時間復(fù)習(xí)考試。如果計(jì)劃延誤了就算了,不考了。計(jì)劃其實(shí)不是很順利,10月份因?yàn)閷W(xué)生會很多事要做,而且剛好學(xué)校要進(jìn)行本科評估,抓的比較嚴(yán)不可以太常逃課,又剛剛好有朋友拉我去作一些商業(yè)活動。這時忽然因?yàn)楹团笥殉臣芰耍孕那楹懿缓茫行┳员┳詶墸幌伦影焉磉叺氖氯客屏耍褜W(xué)生會的職務(wù)也辭了(在他們的挽留下雖然最后沒有辭成功只是暫時離開學(xué)生會),什么都不理,專心地學(xué)習(xí)。結(jié)果進(jìn)度又拉了上來,大概在十一月底就完成了基本的學(xué)習(xí)。
復(fù)習(xí):
在十一月份買了那本Sun Certified Programmer for Java 5(Exam 310-055),這是對考試有極大幫助的一本書。這本書的作者就是大名鼎鼎倍受好評的《Head First》系列的作者,也是SCJP的出題人。這本書對055考試中每個考點(diǎn),哪些必考哪些不考,而且對知識做了很細(xì)致的整理。里面的題目也出的很好,基本每個考點(diǎn)都有十幾道題目,我基本可以維持在六十多的正確率。隨書還附送一個模擬器,模擬真正的考試環(huán)境。之后因?yàn)閷ang包中的一些類還有一些疑惑就買了一本《The Java Programming Language 4e》。買來這本書初看上去好像講得很泛很蜻蜓點(diǎn)水式,但是看下去之后發(fā)現(xiàn)這正是這本書的最大優(yōu)點(diǎn),幾乎對JAVA語言的每個方面都有一個明確的概念,這對理解各個細(xì)節(jié)有很大作用。
QQ群:
在一次偶然的機(jī)會,在一個論壇上看到了有一些準(zhǔn)備考SCJP的人組織的QQ群,在里面認(rèn)識了一些人。有些考過的,有些和我一樣準(zhǔn)備考的。在這個群里經(jīng)常有人提問題,之后就是一大群人在這里熱烈地在討論,氣氛好不熱烈。這可能也是我考試成功的一個因素,不過我倒是在群里經(jīng)常為人回答問題的那個

。
報名:
在十二月份,就去問了一些通過考試的人,具體怎樣報名,考試時怎樣。最后決定去廣州天河那里考試,因?yàn)槲野职衷谀抢锕ぷ鳌6鴷r間定在十二月份倒數(shù)第二個星期五。選在倒數(shù)第二個星期是因?yàn)闉榱私o自己多點(diǎn)時間準(zhǔn)備,而不選最后一個星期是要以防萬一。結(jié)果最后一個星期真的發(fā)生了很大件事--地震,這次地震使得溝通中國大陸和美洲的光纖斷了,考試中心也因?yàn)檫@樣無法正常考試。
因?yàn)檫@次考試優(yōu)惠活動sun要求提前一個星期去報名。于是我在女朋友的陪伴下一起去廣州報名。報名時,我就選了055的中文考試。報完名回來之后開始后悔了,聽到有些人說中文是用機(jī)器翻譯的有些地方根本看不懂在說什么,還有后悔報了055因?yàn)榘l(fā)現(xiàn)知道考scjp的人幾乎都是報035,而有幾個報055的好像都沒有通過。在考試前就這么一直在想來想去,弄到自己很緊張。
最后沖刺:
在最后一個星期里,我一直都很緊張。我把那本scjp考試指南每一章最后的總結(jié)都看了一遍,把以前做錯的題又在看了一下研究一下自己為什么錯,哪個方面的知識點(diǎn)不清楚然后再鞏固一下。然后做一下模擬器,感受一下考試時的感覺。做了一次模擬器之后很失望,因?yàn)榈谝淮巫隽酥蟪煽冎挥邪俜种氖喽眩x考試通過的分?jǐn)?shù)還有十個百分點(diǎn)。這件事使我自己更加緊張。但最后兩天,女朋友特地跑過來和我聊天開導(dǎo)我,使我自己放松了很多。在倒數(shù)第二天因?yàn)樵摽吹囊部赐炅耍詻]事看了一下035的TestKing。
決戰(zhàn)考試:
我是提前一天去廣州的,準(zhǔn)備第二天早上就去考試。去到廣州之后本來想著在我爸宿舍那里再看一下書,但是下午睡了一覺然后吃了飯后就自己去了購書中心那里逛了幾個鐘。結(jié)果腦子里都裝了很多spring,stucts的東西,整個晚上都在思考這些技術(shù)。晚上回爸爸宿舍那里,爸爸和一些同事就打邊爐和喝酒,弄到很晚快一點(diǎn)鐘才去睡覺,好像躺了一個鐘左右才睡著。
第二天早上起來之后就發(fā)現(xiàn)頭痛,開始有點(diǎn)慌了,怕頭痛等一下考試發(fā)揮不好。我就吃了很多薄荷糖,這是一直的習(xí)慣,一緊張就要吃薄荷糖。在八點(diǎn)半時就打了輛的去考場那里。到了那里之后,那個招待的人還說:“哇,正好九點(diǎn),那么準(zhǔn)時。”她說完后就去考試那間房間里開電腦下載試卷。考試前還要簽一張考試協(xié)議書,保證不能作弊,然后發(fā)一張做了標(biāo)記的草稿紙。有一個人是和我同時考的,他比我晚來了十分鐘左右。和他聊了一下,原來他是從事JAVA開發(fā)的。他聽說我只是個大二的學(xué)生,就帶有一點(diǎn)嘲諷的口氣對我“SCJP是需要實(shí)際開發(fā)經(jīng)驗(yàn)的。”一聽他這么說,我就懷疑這個人沒什么技術(shù)的,之后他就去和招待小姐聊天。而且他還問有沒有api文檔可以看,這時我可以肯定他只是一個白癡。考試是在一間有幾部電腦的房間里進(jìn)行的,房間里有監(jiān)視器,考試時只有考生沒有監(jiān)考人員。
開始考試了,一開始要回答一些關(guān)于你對JAVA技術(shù)的了解情況,比如你對某個方面的掌握情況如何。有人說這會影響你考試試題的難度,我覺得這不大可能,因?yàn)樵囶}一早就下載到考試系統(tǒng)中了。再仔細(xì)研究一下,發(fā)現(xiàn)windows的一些功能鍵都被攔截了,比如任務(wù)管理器和win鍵。回答完那些調(diào)查問題就開始答題了,73道題目之外還有幾個調(diào)查問題,比如你是在哪里知道sun的scjp考試之類的問題。
我的答題策略是按照SCJP學(xué)習(xí)指南里講的策略。第一遍先把簡單得可以一下子得出答案的題作完,第二遍把第一遍沒有做的題寫完,第三遍把做了標(biāo)記的題目再作一次,第四遍檢查。考試中發(fā)現(xiàn)中文漢化的還可以,有幾道題翻譯的有點(diǎn)怪,還有一道拖放題,題目竟然因?yàn)榭臻g不夠?qū)懥艘话耄堑李}我記得是考線程(Thread)的。還有拖放題有些問題,就是只要打開了之后不管你有沒有回答完系統(tǒng)都認(rèn)為你已經(jīng)回答了,而且在回答完之后再次打開,之前填的答案會丟失,所以每道我都做了記號并把答案記下來。完成之后考試時間還剩一個鐘多一點(diǎn),我狠心地按下了完成按鈕結(jié)束考試。從決定按下到走出考試的房間知道結(jié)果之前,心一直猛跳,很緊張很緊張。走去考試的房間后,就向那個負(fù)責(zé)安排考試的那個人說我考完了,她叫我稍等一下,她去拿打印報告。考試答案是發(fā)送到一個考試總的中心,然后分析答案,再傳真考試報告到你考試的那個考試中心的,這個過程總的時間只有幾秒。過了一分鐘左右,我看到她拿來了成績報告,她先在上面蓋一些章。我很緊張地問她過了沒有,她輕描淡寫說過了。等到我拿到考試報告時,有點(diǎn)失望,因?yàn)橹豢剂?7%,只比通過百分率高了9個百分點(diǎn),我懷疑是我在最后檢查時把很多題目改錯了。走出考試中心后我馬上打電話給我女朋友和媽媽,告訴他們結(jié)果。那時真的很興奮。而走出考試那個房間時,另外一個考試那個人才回答到五十幾題,他在考試時在很多題目都是一直拿鼠標(biāo)在答案選項(xiàng)那里一直猛點(diǎn)。我有點(diǎn)幸災(zāi)樂禍,估計(jì)他是通不過。
收獲體會:
通過這次考試我比較好得掌握了JAVA語言的一些基礎(chǔ)(只是一些而已),其實(shí)在一邊學(xué)習(xí)復(fù)習(xí)時,寫了很多toy code(比如一些文件操作工具等),充分地理解了一些用法和機(jī)制。打下了比較好的JAVA基礎(chǔ)。
不過通過考試之后會更累。因?yàn)檫€有很多很多JAVA知識要學(xué)習(xí),就像
讀的書越多,學(xué)的東西越多,越會發(fā)現(xiàn)自己的無知,然后又去讀更加多的書學(xué)習(xí)更多的知識。之后馬上就指定新的學(xué)習(xí)計(jì)劃和學(xué)習(xí)任務(wù),如,JDBC,XML編程,JDNI,JSP和Servlet,EJB,各種框架,等等。
考到這個證之后好像沒什么成功感,因?yàn)榘l(fā)現(xiàn)很多人都考了這個證,所以可能之后會考SCEA(SUN認(rèn)證架構(gòu)師)。有些人為了SCJP,報了035,然后把時間都用在背題上,之后通過考試之后就到處炫耀。因?yàn)?35的題庫網(wǎng)上有,而且才只有二百多道題左右,所以很多人都可以通過這個方法輕松的通過這些考試,以致于把SCJP這個認(rèn)證的可信度真實(shí)度都拉低了。055現(xiàn)在還沒有題庫,而且考試范圍比035多了4個考試內(nèi)容,所以比較少人考。
感謝:
能夠通過這次的考試,除了我自己的努力,也離不開女朋友和爸爸媽媽的支持,謝謝他們。特別是女朋友在我緊張迷茫時開導(dǎo)了我,鼓勵了我,讓我能夠用比較好的心態(tài)面對考試。婷婷我愛你。
摘要: 摘要
Cactus是Jakarta的子項(xiàng)目之一,是對JUnit的一個擴(kuò)展。Catus是Java EE容器內(nèi)測試的事實(shí)標(biāo)準(zhǔn)。
Cactus是針對集成單元測試的開源框架。可以在容器內(nèi)對JAVA EE服務(wù)器端組件(如JSP,Servlet,EJB,數(shù)據(jù)庫等)進(jìn)行細(xì)粒度的單元測試。
Cactus工作原理。。。
閱讀全文
?
?
按農(nóng)歷算,今天是今年的第一天,今天我的Blog也開通啦。
Blog是記錄自己成長過程的地方,是發(fā)表自己對各種技術(shù)的看法的地方,是推廣自己想法的地方。
記得有人說過有技術(shù)還不行,還要能把自己對技術(shù)的想法和感悟?qū)懗鰜怼:罱萦芯浜芙?jīng)典的話:“我手寫我心!”
新年的愿望:
我要更加努力,變得更強(qiáng)!